数据结构Java04【树结构概述、创建、遍历、查找节点、删除节点】
学习地址:【数据结构与算法基础-java版】 🚀数据结构--Java专栏🚀
- 笔记01【01-09】【概述、数组基本使用】【源码、课件】
- 笔记02【10-18】【栈、队列、单链表(增删节点)、循环链表、双向循环链表、递归(斐波那契、汉诺塔)】
- 笔记03【19-27】【(时间、空间复杂度);八大排序(冒泡、快速、插入、希尔、选择、归并、基数、队列基数)】
- 笔记04【28-33】【树结构(二叉树)概述、创建、遍历、查找节点、删除节点】
- 笔记05【34-39】【顺序存储二叉树概述、二叉树遍历、堆排序、线索二叉树实现及遍历】
- 笔记06【40-48】【赫夫曼树、概述、原理分析、代码实现(数据压缩、创建编码表、解码、压缩文件、解压文件)】
- 笔记07【49-54】【二叉排序树(添加、查找、删除节点)】
- 笔记08【55-57】【二叉平衡树(AVL)-概述、单旋转、双旋转】
- 笔记09【58-60】【计算机中数据的存储原理、2-3树的插入原理、B树和B+树】
- 笔记10【61-63】【哈希表概述、散列函数的设计、散列冲突解决方案】
- 笔记11【64-67】【图结构概述、图遍历原理(BFS\DFS)、图遍历代码实现】
目 录
P28-4.1树结构概述
P29-4.2二叉树的概述
P30-4.3创建二叉树
P31-4.4遍历二叉树
P32-4.5二叉树中节点的查找
P33-4.6删除二叉树的子树
1、BinaryTree.java
2、Node.java
3、TestBinaryTree.java
P28-4.1树结构概述
顺序存储:开始位置、结束位置,插入数据、删除数据=====》在数据量大的情况下,非常耗费时间!根据下标查找元素。
链表存储:从第1个节点,开始往后找。。。【耗时!!!】
树结构:查找性能、插入性能 较好!!!
双亲结点:雌雄同体!!!子节点的上一个节点。--------->子节点
路径:从某个节点到达某个节点,途中经过的结点。
节点的度:节点有几个子节点(子树)。
节点的权:给节点赋予的值(节点中存储的数值)。
叶子节点:没有子节点的节点。
树的高度:最大层数。【4】
森林:多个树。
P29-4.2二叉树的概述
二叉树:任何一个节点的子节点数量不超过2!
二叉树的子节点 分 左节点 和 右节点。
满二叉树:所有叶子节点都在最后一层,而且节点的总数为 2^n-1。【n是树的高度!】
满二叉树,是 完全二叉树!
完全二叉树:所有叶子节点都在最后一层或倒数第二层,且最后一层的叶子节点在左边连续,倒数第二层的叶子节点在右边连续。
从上到下,从左到右 依次 数能数完 就是 完全二叉树!
P30-4.3创建二叉树
双链表 是 前驱 和 后继,树 是 左右孩子结点,不一样!
二叉树的5种形式:
P31-4.4遍历二叉树
遍历详解:https://blog.csdn.net/weixin_44949135/article/details/105291651
P32-4.5二叉树中节点的查找
P33-4.6删除二叉树的子树
删除 节点(子树):
1、BinaryTree.java
package demo5;public class BinaryTree {Node root;// 设置根节点public void setRoot(Node root) {this.root = root;}// 获取根节点public Node getRoot() {return root;}public void frontShow() {if (root != null) {root.frontShow();}}public void midShow() {if (root != null) {root.midShow();}}public void afterShow() {if (root != null) {root.afterShow();}}public Node frontSearch(int i) {return root.frontSearch(i);}public void delete(int i) {if (root.value == i) {root = null;} else {root.delete(i);}}}2、Node.java
package demo5;public class Node {// 节点的权int value;// 左儿子Node leftNode;// 右儿子Node rightNode;public Node(int value) {this.value = value;}// 设置左儿子public void setLeftNode(Node leftNode) {this.leftNode = leftNode;}// 设置右儿子public void setRightNode(Node rightNode) {this.rightNode = rightNode;}// 前序遍历public void frontShow() {// 先遍历当前节点的内容System.out.print(value + "、");// 左节点if (leftNode != null) {leftNode.frontShow();}// 右节点if (rightNode != null) {rightNode.frontShow();}}// 中序遍历public void midShow() {// 左子节点if (leftNode != null) {leftNode.midShow();}// 当前节点System.out.print(value + "、");// 右子节点if (rightNode != null) {rightNode.midShow();}}// 后序遍历public void afterShow() {// 左子节点if (leftNode != null) {leftNode.afterShow();}// 右子节点if (rightNode != null) {rightNode.afterShow();}// 当前节点System.out.print(value + "、");}// 前序查找public Node frontSearch(int i) {Node target = null;// 对比当前节点的值if (this.value == i) {return this;// 当前节点的值不是要查找的节点} else {// 查找左儿子if (leftNode != null) {// 有可能可以查到,也可以查不到,查不到的话,target还是一个nulltarget = leftNode.frontSearch(i);}// 如果不为空,说明在左儿子中已经找到if (target != null) {return target;}// 查找右儿子if (rightNode != null) {target = rightNode.frontSearch(i);}}return target;}// 删除一个子树public void delete(int i) {Node parent = this;// 判断左儿子if (parent.leftNode != null && parent.leftNode.value == i) {parent.leftNode = null;return;}// 判断右儿子if (parent.rightNode != null && parent.rightNode.value == i) {parent.rightNode = null;return;}// 递归检查并删除左儿子parent = leftNode;if (parent != null) {parent.delete(i);}// 递归检查并删除右儿子parent = rightNode;if (parent != null) {parent.delete(i);}}}3、TestBinaryTree.java
package demo5;public class TestBinaryTree {public static void main(String[] args) {// 创建一颗树BinaryTree binTree = new BinaryTree();// 创建一个根节点Node root = new Node(1);// 把根节点赋给树binTree.setRoot(root);// 创建一个左节点Node rootL = new Node(2);// 把新创建的节点设置为根节点的子节点root.setLeftNode(rootL);// 创建一个右节点Node rootR = new Node(3);// 把新创建的节点设置为根节点的子节点root.setRightNode(rootR);// 为第二层的左节点创建两个子节点rootL.setLeftNode(new Node(4));rootL.setRightNode(new Node(5));// 为第二层的右节点创建两个子节点rootR.setLeftNode(new Node(6));rootR.setRightNode(new Node(7));// 前序遍历树System.out.println("========前序遍历树========");binTree.frontShow();System.out.println("\n");// 中序遍历System.out.println("========中序遍历树========");binTree.midShow();System.out.println("\n");// 后序遍历System.out.println("========后序遍历树========");binTree.afterShow();System.out.println("\n\n");// 前序查找Node result = binTree.frontSearch(3);System.out.println(result);System.out.println(result == rootR);System.out.println("\n\n===============");// 删除一个子树binTree.delete(4);binTree.frontShow();}}希望对您有所帮助~
总结
以上是生活随笔为你收集整理的数据结构Java04【树结构概述、创建、遍历、查找节点、删除节点】的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Android 用户信息管理程序【SQL
- 下一篇: 数据结构Java05【二叉树概述、二叉树