🍊1.某完全二叉树按层次输出(同一层从左到右)的序列为 ABCDEFGH 。该完全二叉树的前序序列为(A)
A: ABDHECFG B: ABCDEFGH C: HDBEAFCG D: HDEBFGCA
🍖🍖解答:由题干我们可以知道这是一个完全二叉树,又是层序遍历的结果已经给出,那么我们可以顺势画出该二叉树,层序遍历的第一个节点就是根节点,依次画出得:
🍎2.二叉树的先序遍历和中序遍历如下:先序遍历:EFHIGJK;中序遍历:HFIEJKG.则二叉树根结点为(A)
A: E B: F C: G D: H
🍗🍗解答:先序遍历的第一个节点就是我们的根节点,由题意的A。
🍅3.设一课二叉树的中序遍历序列:badce,后序遍历序列:bdeca,则二叉树前序遍历序列为(D)
A: adbce B: decab C: debac D: abcde
🧀🧀解答:由题意,给出了中序和后续的节点,由后续最后一个节点就是根节点知道a就是根节点,中序第一个节点就是最左侧的节点,那么最左侧的节点就是b,那么看中序的结果是badce,那么根节点a的左孩子就只有一个b,dce都在a的右边,在根据后续遍历的结果dec得出c是右边节点的根节点,于是可以画出我们的二叉树。
🍏 4.某二叉树的后序遍历序列与中序遍历序列相同,均为 ABCDEF ,则按层次输出(同一层从左到右)的序列为(A)
A: FEDCBA B: CBAFED C: DEFCBA D: ABCDEF
🍤🍤解答:我们先来回顾一下后序和中序的遍历方式;后序:左右根 中序:左根右 由题意得知后序与中序的遍历结果相同,那么我们发现舍去右孩子,二者的遍历方式都是左根,也就是说该二叉树是没有右孩子的一颗二叉树。画出效果图如下:
🍼🍼重要结论:只给出二叉树的前序和后序的结果,是无法推导出该课二叉树的模型的,也就是三种遍历方式,想要通过其中两种得到第三种的结果,则这两种方式中必须存在中序遍历!
二、二叉树的基本操作
接下来博主将通过idea来演示二叉树的基本操作。
我们下面的基本操作都是基于这个二叉树来完成的!
1、首先我们新建一个包名为BinaryTree,在这个包下新建两个类Test 和 TestBinaryTree。
2、我们初始化实现一个内部类:
public class TreeNode {
char val;
TreeNode left;
TreeNode right;
TreeNode() {
}
TreeNode(char val) {
this.val = val;
}
TreeNode(char val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
public TreeNode createTree() {//创建二叉树
TreeNode A = new TreeNode('A');
TreeNode B = new TreeNode('B');
TreeNode C = new TreeNode('C');
TreeNode D = new TreeNode('D');
TreeNode E = new TreeNode('E');
TreeNode F = new TreeNode('F');
TreeNode G = new TreeNode('G');
TreeNode H = new TreeNode('H');
A.left = B;
A.right = C;
B.left = D;
B.right = E;
C.left = F;
C.right = G;
E.right = H;
return A;
}
3、三种遍历方式的实现
public void preOrder(TreeNode root){//前序遍历
if(root == null){
return;
}
System.out.print(root.val+" ");
preOrder(root.left);
preOrder(root.right);
}
public void inOrder(TreeNode root){//中序遍历
if(root == null){
return;
}
preOrder(root.left);
System.out.print(root.val+" ");
inOrder(root.right);
}
public void postOrder(TreeNode root){//后序遍历
if(root == null){
return;
}
preOrder(root.left);
inOrder(root.right);
System.out.print(root.val+" ");
}
运行结果:
4、获取树中节点的个数(2种方法)
// 获取树中节点的个数 两种方法
public static int nodeSize = 0;
public int size(TreeNode root) {
if(root == null) {
return 0;
}
nodeSize++;
size(root.left);
size(root.right);
return nodeSize;
}
public int size2(TreeNode root) {
if(root == null) {
return 0;
}
int tmp = size2(root.left)+size2(root.right)+1;
return tmp;
}
运行结果:
5、获取叶子节点的个数(两种方法)
int getLeafNodeCount(TreeNode root) {
if(root == null) {
return 0;
}
if(root.left == null && root.right == null) {
return 1;
}
int tmp = getLeafNodeCount(root.left) +
getLeafNodeCount(root.right);
return tmp;
}
public static int leafSize = 0;
void getLeafNodeCount2(TreeNode root) {
if(root == null) {
return ;
}
if(root.left == null && root.right == null) {
leafSize++;
}
getLeafNodeCount2(root.left);
getLeafNodeCount2(root.right);
}
运行结果:
6、判断第K层节点的个数
int getKLevelNodeCount(TreeNode root,int k) {
if(root == null || k <= 0) {
return 0;
}
if(k == 1) {
return 1;
}
int tmp = getKLevelNodeCount(root.left,k-1) +
getKLevelNodeCount(root.right,k-1);
return tmp;
}
运行结果:(这里我们求的是第3层的结果)
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
mg-gPDifJ32-1714274204784)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新