声明:此博客涵盖众多二叉树知识点,完全可供学校期末考试,oj题完全可供提升对二叉树的理解
备注:二叉树习题部分画图展示步骤过于繁琐,文章内只省略展示,如果看不懂,私信博主录视频讲解!
文章前提:
通过本文章可以掌握:
- 二叉树数据结构的概念、性质、基本实现
- 二叉树前中后序的递归
- 二叉树层序的写法
- 二叉树的前中后序的非递归写法
- 二叉树相关的 oj 面试题
文章目录:
1、树型结构的概念
1.1、基本概念
树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。
树型结构具有以下特点:
- 有一个特殊的节点,称为根节点,根节点没有前驱节点
- 除根节点外,其余节点被分成M(M > 0)个互不相交的集合T1、T2、…、Tm,其中每一个集合 Ti (1 <= i <= m) 又是一棵与树类似的子树。每棵子树的根节点有且只有一个前驱,可以有0个或多个后继
- 树是递归定义的
图解上述概念:
至于树的递归定义:在后面二叉树实现再细说
树型结构注意点:
1.2、基本名词
声明:这些名词较为重要一点,需牢记
- 结点的度:一个结点含有子树的个数称为该结点的度;
- 树的度:一棵树中,所有结点度的最大值称为树的度;
- 叶子结点或终端结点:度为0的结点称为叶结点;
- 双亲结点或父结点:若一个结点含有子结点,则这个结点称为其子结点的父结点;
- 孩子结点或子结点:一个结点含有的子树的根结点称为该结点的子结点;
- 根结点:一棵树中,没有双亲结点的结点;
- 结点的层次:从根开始定义起,根为第1层,根的子结点为第2层,以此类推
- 树的高度:树中结点的最大层次;
- 结点的深度:当前结点所处的层数,即结点的深度,结点的最大深度就是树的高度
树的以下概念只需了解,在看书时只要知道是什么意思即可:
- 非终端结点或分支结点:度不为0的结点; 如上图:D、E、F、G…等节点为分支结点
- 兄弟结点:具有相同父结点的结点互称为兄弟结点; 如上图:B、C是兄弟结点
- 堂兄弟结点:双亲在同一层的结点互为堂兄弟;如上图:H、I互为兄弟结点
- 结点的祖先:从根到该结点所经分支上的所有结点;如上图:A是所有结点的祖先
- 子孙:以某结点为根的子树中任一结点都称为该结点的子孙。如上图:所有结点都是A的子孙
- 森林:由m(m>=0)棵互不相交的树组成的集合称为森林
图解上述名词:
1.3、树的表示形式
声明:该内容了解即可
树结构相对线性表就比较复杂了,要存储表示起来就比较麻烦了,实际中树有很多种表示方式,如:双亲表示法,
孩子表示法、孩子双亲表示法、孩子兄弟表示法等等
最常用的是:孩子双亲表示法,孩子兄弟表示法
1、孩子兄弟表示法:
具体实例:
2、孩子双亲表示法
1.4、树的应用
文件系统管理(目录和文件)
声明:笔试、面试、考研二叉树被问到的概率非常大,务必重视
2、二叉树
2.1、概念
一棵二叉树是结点的一个有限集合,该集合:
- 或者为空
- 或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成。
二叉树的模式图:
二叉树与树的区别:
1、二叉树中每个结点最多有两个孩子,可以是一个、两个或者没有孩子,孩子的数量一定不会大于 2,所以二叉树中一定不存在度 > 2 的结点
2、二叉树的子树有左右之分,左右次序不能颠倒,因此二叉树是有序树,这里的有序指的不是大小,而是顺序有序
3、如果是一颗二叉树,那么它的每颗子树也一定都是二叉树
以下几种情况都可以被称为二叉树:
下面欣赏一下来自大自然的二叉树:
2.2、两种特殊的二叉树
2.2.1、满二叉树
1、 满二叉树: 一棵二叉树,如果每层的结点数都达到最大值,则这棵二叉树就是满二叉树。
2、满二叉树模式图:
通过上述的推导:
我们可以发现当层数为K的二叉树结点个数满足:2 ^ K - 1 时此二叉树为满二叉树
2.2.2、完全二叉树
1、完全二叉树:完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从0至n-1的结点一一对应时称之为完全二叉树。 要注意的是满二叉树是一种特殊的完全二叉树
上面的概念简化后就是从二叉树的根结点开始编号,如果编号一直是连续的,那么这颗二叉树就是一颗完全二叉树,反之就不是完全二叉树
2、完全二叉树模式图:
2.3、二叉树的性质
性质推导:
性质 1 和性质 2 在满二叉树时已经推导过,结点数最多就是满二叉树的情况
性质 3 推导:
该公式还可以进行推广:
性质四注意点:一定要是完全二叉树才有此性质
性质五推导:
2.4、有关二叉树性质的习题
声明:学校数据结构期末考试常见题型
习题一:计算二叉树叶子结点的个数(考查性质3的使用)
解题过程:
习题二:计算叶子结点的个数(考查完全二叉树的性质)
解题过程:
推导出来的完全二叉树结点性质:
习题三:计算叶子结点个数(利用完全二叉树结点的性质)
解题过程:
习题四:考查性质4
解题过程
2.5、二叉树的存储
二叉树的存储结构分为:顺序存储和类似于链表的链式存储。
二叉树的链式存储是通过一个一个的节点引用起来的,常见的表示方式有二叉和三叉表示方式
孩子表示法:
孩子双亲表示法(AVL树,红黑树,B-树常使用此方法存储):
2.6、二叉树的创建
声明:这里创建二叉树的方法是孩子表示法
1、创建一个 TreeNode 类代表的是二叉树的每一个结点
2、把各个结点按照一定顺序连接起来。组成一颗二叉树
这里创建如图的二叉树:
调试结果:
声明:所有二叉树的相关题目,基本都是通过某种遍历方式来解决的
2.7、二叉树的遍历
所谓遍历:是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问题(比如:打印节点内容、节点内容加1)
二叉树的遍历分为四种:前序遍历,中序遍历,后序遍历,层次遍历。他们的区别就是根结点的打印顺序不同
注:
2.7.1、二叉树的前序遍历
前序遍历顺序:根结点—》左子树—》右子树
前序遍历过程:
前序遍历代码实现:
publicvoidpreOrder(BTNode root){if(root ==null){return;}System.out.print(root.val +" ");preOrder(root.left);preOrder(root.right);}
具体遍历流程:
2.7.2、二叉树的中序遍历
中序遍历:左子树—》根结点—》右子树
中序遍历过程:先访问左子树再打印根结点最后访问右子树
中序遍历代码实现:
publicvoidinOrder(TreeNode root){if(root ==null){return;}inOrder(root.left);System.out.print(root.val+" ");inOrder(root.right);}
具体遍历流程:
2.7.3、二叉树的后序遍历
后序遍历:左子树—》右子树—》根结点
后序遍历过程:先访问左右子树最后打印根结点
后序遍历代码实现:
publicvoidpostOrder(TreeNode root){if(root ==null){return;}postOrder(root.left);postOrder(root.right);System.out.print(root.val+" ");}
2.7.4、二叉树的层次遍历
类似于完全二叉树给每个结点编号后,按照结点编号顺序打印结点即可
练习前中后序遍历:
2.7.5、二叉树遍历习题
习题一、给定完全二叉树的层次遍历,求其前序序列结果
解题过程:
习题二、给定先序遍历和中序遍历的结果,确定一棵二叉树
解题过程:
习题三、给定中序遍历和后序遍历,确定一棵二叉树
解题过程:
习题四、已知两个序列结果相同,确定一棵二叉树
解题过程:
2.8、二叉树的基本操作
声明:针对于二叉树的问题建议使用子问题的思路,子问题思路为面试常考思路
2.8.1、获取树中节点的个数
①、遍历思路:
int count =0;publicintsize(TreeNode root){if(root ==null){return0;}
count++;size(root.left);size(root.right);return count;}
代码解析:
代码执行过程:
②、子问题思路
代码执行过程:
代码:
publicintsize2(TreeNode root){if(root ==null){return0;}returnsize2(root.left)+size2(root.right)+1;}
<div id = "23>2.8.2、获取叶子节点的个数
①、遍历思路
int leftCount =0;publicintgetLeafNodeCount(TreeNode root){if(root ==null){return0;}if(root.left ==null&& root.right ==null){
leftCount++;}getLeafNodeCount(root.left);getLeafNodeCount(root.right);return leftCount;}
②、子问题思路
publicintgetLeafNodeCount2(TreeNode root){if(root ==null){return0;}if(root.left ==null&& root.right ==null){return1;}returngetLeafNodeCount2(root.left)+getLeafNodeCount2(root.right);}
2.8.3、获取第K层节点的个数
声明:由于子问题思路比较常用,从此题后不再展示遍历思路
publicintgetKLevelNodeCount(TreeNode root,int k){if(root ==null|| k <=0){return0;}if(k ==1){return1;}returngetKLevelNodeCount(root.left, k -1)+getKLevelNodeCount(root.right, k -1);}
2.8.4、获取二叉树的高度
publicintgetHeight(TreeNode root){if(root ==null){return0;}returnMath.max(getHeight(root.left),getHeight(root.right))+1;}
2.8.5、检测值为value的元素是否存在
publicTreeNodefind(TreeNode root,char val){if(root ==null){returnnull;}if(root.val == val){return root;}TreeNode ret =find(root.left, val);if(ret !=null){return ret;}
ret =find(root.right, val);if(ret !=null){return ret;}returnnull;}
2.8.6、判断一棵树是不是完全二叉树
publicbooleanisCompleteTree(TreeNode root){if(root ==null)returntrue;Queue<TreeNode> queue =newLinkedList<>();
queue.offer(root);while(!queue.isEmpty()){TreeNode cur = queue.poll();if(cur !=null){
queue.offer(cur.left);
queue.offer(cur.right);}else{break;}}for(TreeNode t : queue){if(t !=null){returnfalse;}}returntrue;}
3、二叉树的相关 oj 习题
声明:以下12道题为面试常考题型,务必掌握
3.1、检查两颗树是否相同
leetcode – 100、相同的树
①、题目:
②、解题思路:
③、详细代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/classSolution{publicbooleanisSameTree(TreeNode p,TreeNode q){//情况1当p和q为空的位置不一致的时候if((p ==null&& q !=null)||(p !=null&& q ==null)){returnfalse;}elseif(p ==null&& q ==null){returntrue;}elseif(p.val != q.val){returnfalse;}returnisSameTree(p.left,q.left)&&isSameTree(p.right,q.right);}}
3.2、另一颗树的子树
LeetCode - 572、另一颗树的子树
①、题目:
②、解题思路:
③、详细代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/classSolution{privatebooleanisSameTree(TreeNode p,TreeNode q){if(p !=null&& q ==null|| p ==null&& q !=null){returnfalse;}if(p ==null&& q ==null){returntrue;}if(p.val != q.val){returnfalse;}returnisSameTree(p.left,q.left)&&isSameTree(p.right,q.right);}publicbooleanisSubtree(TreeNode root,TreeNode subRoot){if(root ==null|| subRoot ==null){returnfalse;}if(isSameTree(root,subRoot)){returntrue;}if(isSubtree(root.left,subRoot)){returntrue;}if(isSubtree(root.right,subRoot)){returntrue;}returnfalse;}}
3.3、二叉树最大深度
LeetCode–100、二叉树最大深度
此题就是求二叉树的深度,可以翻看上面的基本操作解析,这里不过多赘述
classSolution{publicintmaxDepth(TreeNode root){if(root ==null){return0;}returnMath.max(maxDepth(root.left),maxDepth(root.right))+1;}}
3.4、 判断一颗二叉树是否是平衡二叉树
LeetCode–110、判断一颗二叉树是否是平衡二叉树
①、题目:
②、解题思路:
③、详细代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/classSolution{privateintgetHeight(TreeNode root){if(root ==null){return0;}returnMath.max(getHeight(root.left),getHeight(root.right))+1;}publicbooleanisBalanced(TreeNode root){if(root ==null){returntrue;}int lh =getHeight(root.left);int rh =getHeight(root.right);if(Math.abs(lh - rh)<=1&&isBalanced(root.left)&&isBalanced(root.right)){returntrue;}returnfalse;}}
④、代码改进
⑤、详细代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/classSolution{privateintgetHeight(TreeNode root){if(root ==null){return0;}int lh =getHeight(root.left);int rh =getHeight(root.right);if(lh >=0&& rh >=0&&Math.abs(lh - rh)<=1){returnMath.max(lh,rh)+1;}return-1;}publicbooleanisBalanced(TreeNode root){if(root ==null){returntrue;}returngetHeight(root)>=0;}}
3.5、对称二叉树
LeetCode–101、对称二叉树
①、题目:
②、解题思路:
③、详细代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/classSolution{privatebooleanisSame(TreeNode leftRoot,TreeNode rightRoot){if(leftRoot ==null&& rightRoot ==null){returntrue;}if(leftRoot ==null|| rightRoot ==null){returnfalse;}if(leftRoot.val == rightRoot.val){returnisSame(leftRoot.left,rightRoot.right)&&isSame(leftRoot.right,rightRoot.left);}returnfalse;}publicbooleanisSymmetric(TreeNode root){if(root ==null){returntrue;}returnisSame(root.left,root.right);}}
3.6、二叉树的构建及遍历
牛客—KY11
①、题目:
②、解题思路:
③、详细代码:
importjava.util.*;classTreeNode{publicchar val;publicTreeNode left;publicTreeNode right;publicTreeNode(char val){this.val = val;}}publicclassMain{publicstaticint i =0;privatestaticTreeNodecreateTree(String str){TreeNode root =null;if(str.charAt(i)!='#'){
root =newTreeNode(str.charAt(i));
i++;
root.left =createTree(str);
root.right =createTree(str);}else{
i++;}return root;}privatestaticvoidinOrder(TreeNode root){if(root ==null){return;}inOrder(root.left);System.out.print(root.val +" ");inOrder(root.right);}publicstaticvoidmain(String[] args){Scanner scanner =newScanner(System.in);while(scanner.hasNextLine()){String str = scanner.nextLine();TreeNode root =createTree(str);inOrder(root);}}}
3.7、二叉树的分层遍历
LeetCode—102、二叉树的分层遍历
①、题目:
②、解题思路:
③、详细代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/importjava.util.*;classSolution{publicList<List<Integer>>levelOrder(TreeNode root){List<List<Integer>> leveLorder =newArrayList<List<Integer>>();if(root ==null){return leveLorder;}Queue<TreeNode> qu =newLinkedList<>();
qu.offer(root);while(!qu.isEmpty()){int size = qu.size();List<Integer> ret =newArrayList<>();while(size !=0){TreeNode cur = qu.poll();
ret.add((int) cur.val);if(cur.left !=null){
qu.offer(cur.left);}if(cur.right !=null){
qu.offer(cur.right);}
size--;}
leveLorder.add(ret);}return leveLorder;}}
3.8、给定一个二叉树, 找到该树中两个指定节点的最近公共祖先
LeetCode—236、给定一个二叉树, 找到该树中两个指定节点的最近公共祖先
①、题目
②、解题思路
③、详细代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/classSolution{publicTreeNodelowestCommonAncestor(TreeNode root,TreeNode p,TreeNode q){if(root ==null){returnnull;}if( p == root || q == root){return root;}TreeNode leftNode =lowestCommonAncestor(root.left,p,q);TreeNode rightNode =lowestCommonAncestor(root.right,p,q);if(leftNode !=null&& rightNode !=null){return root;}if(leftNode !=null){return leftNode;}if(rightNode !=null){return rightNode;}returnnull;}}
3.9、二叉树搜索树转换成排序双向链表
LeetCode—36、二叉树搜索树转换成排序双向链表
①、题目
②、解题思路
③、详细代码
/*
// Definition for a Node.
class Node {
public int val;
public Node left;
public Node right;
public Node() {}
public Node(int _val) {
val = _val;
}
public Node(int _val,Node _left,Node _right) {
val = _val;
left = _left;
right = _right;
}
};
*/classSolution{Node prev =null;privatevoidinOrder(Node root){if(root ==null)return;inOrder(root.left);
root.left = prev;if(prev !=null){
prev.right = root;}
prev = root;inOrder(root.right);}publicNodetreeToDoublyList(Node root){if(root ==null){returnnull;}inOrder(root);Node head = root;while(head.left !=null){
head = head.left;}Node tail = root;while(tail.right !=null){
tail = tail.right;}
tail.right = head;
head.left = tail;return head;}}
3.10、 根据一棵树的前序遍历与中序遍历构造二叉树
LeetCode—105、根据一棵树的前序遍历与中序遍历构造二叉树
①、题目:
②、解题思路:
③、详细代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/classSolution{int preIndex =0;privateTreeNodecreatTreeBypAndi(int[] preorder,int[] inorder,int begin,int end){if(begin > end){returnnull;}TreeNode root =newTreeNode(preorder[preIndex]);int index =find(inorder,begin,end,preorder[preIndex]);if(index ==-1){returnnull;}
preIndex++;
root.left =creatTreeBypAndi(preorder,inorder,begin,index -1);
root.right =creatTreeBypAndi(preorder,inorder,index +1,end);return root;}privateintfind(int[] inorder,int begin,int end,int key){for(int i = begin; i <= end; i++){if(inorder[i]== key){return i;}}return-1;}publicTreeNodebuildTree(int[] preorder,int[] inorder){if(preorder ==null|| inorder ==null){returnnull;}returncreatTreeBypAndi(preorder,inorder,0,inorder.length -1);}}
3.11、 根据一棵树的中序遍历与后序遍历构造二叉树
LeetCode—106、根据一棵树的中序遍历与后序遍历构造二叉树
①、题目:
②、解题过程:
③、详细代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/classSolution{int postIndex =0;privateTreeNodecreateTreeByIandP(int[] inorder,int[] postorder,int begin,int end){if(begin > end){returnnull;}TreeNode root =newTreeNode(postorder[postIndex]);int index =find(inorder,begin,end,postorder[postIndex]);if(index ==-1){returnnull;}
postIndex--;
root.right =createTreeByIandP(inorder,postorder,index +1,end);
root.left =createTreeByIandP(inorder,postorder,begin,index -1);return root;}privateintfind(int[] inorder,int begin,int end,int key){for(int i = begin; i <= end; i++){if(inorder[i]== key){return i;}}return-1;}publicTreeNodebuildTree(int[] inorder,int[] postorder){
postIndex = inorder.length -1;if(inorder ==null|| postorder ==null){returnnull;}returncreateTreeByIandP(inorder,postorder,0,inorder.length -1);}}
3.12、 二叉树创建字符串
LeetCode—606、二叉树创建字符串
①、题目:
②、解题思路:
③、详细代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/classSolution{privatevoidtreeToString(StringBuffer sb,TreeNode root){if(root ==null)return;
sb.append(root.val);if(root.left !=null){
sb.append("(");treeToString(sb,root.left);
sb.append(")");}else{if(root.right ==null){return;}else{
sb.append("()");}}if(root.right !=null){
sb.append("(");treeToString(sb,root.right);
sb.append(")");}else{return;}}publicStringtree2str(TreeNode root){if(root ==null){returnnull;}StringBuffer sb =newStringBuffer();treeToString(sb,root);return sb.toString();}}
3.13、 二叉树前序非递归遍历实现
LeetCode—144、二叉树前序非递归遍历实现
①、题目
注意:我们之前写过二叉树前序遍历的递归实现 这里采用非递归去实现
②、解题思路
③、详细代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/importjava.util.*;classSolution{publicList<Integer>preorderTraversal(TreeNode root){List<Integer> list =newArrayList<>();TreeNode cur = root;Stack<TreeNode> stack =newStack<>();while(cur !=null||!stack.isEmpty()){while(cur !=null){
list.add(cur.val);
stack.push(cur);
cur = cur.left;}TreeNode top = stack.pop();
cur = top.right;}return list;}}
3.14、 二叉树中序非递归遍历实现
LeetCode–94、二叉树中序非递归遍历实现
①、题目:
②、解题思路
③、详细代码:
publicvoidinOrder1(TreeNode root){TreeNode cur = root;Stack<TreeNode> stack =newStack<>();while(cur !=null||!stack.isEmpty()){while(cur !=null){
stack.push(cur);
cur = cur.left;}TreeNode top = stack.pop();System.out.print(top.val+" ");
cur = top.right;}}
3.15、 二叉树后序非递归遍历实现
①、题目:
②、解题思路:
③、详细代码:
publicvoidlastOrder1(TreeNode root){TreeNode cur = root;TreeNode prev =null;Stack<TreeNode> stack =newStack<>();while(cur !=null||!stack.isEmpty()){while(cur !=null){
stack.push(cur);
cur = cur.left;}TreeNode top = stack.peek();if(top.right ==null|| prev == top.right){
stack.pop();System.out.print(top.val+" ");
prev = top;}else{
cur = top.right;}}}
文章结束
以上就是二叉树博客的全部内容,几乎覆盖了所有二叉树的知识点,希望对大家的学习有一定帮助,如果哪里有疑问,或者哪里有错误,随时连续博主,博主24h随时在线,博主定尽全力帮助解决!感谢大家的支持!
版权归原作者 梦の澜 所有, 如有侵权,请联系我们删除。