目录

  • 二叉树的性质
  • 求节点的个数
  • 求叶子节点的个数
  • 求第K层节点的个数
  • 获取二叉树的高度
  • 查找节点
  • 检查两棵树是否相同
  • 判断一颗树是否是另一棵树的子树

二叉树的性质

1、若规定根节点层数为1,一棵非空二叉树的第i层上最多有2的(i-1)次方个节点
2、高度为K的二叉树的最大节点数为2的K次方-1
3、一棵二叉树的叶子节点的个数为N1,非叶子节点的个数为N2,则N1=N2+1
4、具有n个节点的完全二叉树,其高度为log2(n+1)取整

求节点的个数

  1. 定义一个全局变量,通过前序遍历,中序遍历,后序遍历求节点的个数
    static int size = 0;public void getSize1(Node root){if(root == null){return;}size++;getSize1(root.left);getSize1(root.right);}
  1. 左树的节点+右树的节点+本身(即为1)
    public int getSize2(Node root){if(root == null){return 0;}int leftSize = getSize2(root.left);int rightSize = getSize2(root.right);return leftSize + rightSize + 1;}

求叶子节点的个数

  1. 遍历思路,依旧是前序遍历的思路,定义一个静态变量count,遇到左右都为空的节点,count++
    static int count = 0;public void getLeafSize1(Node root){if(root == null){return;}if(root.left == null && root.right == null){count++;return;}getLeafSize1(root.left);getLeafSize1(root.right);}

  1. 子问题思路
    左树的叶子节点+右树的叶子节点
    public int getLeafSize2(Node root){if(root == null){return 0;}if(root.left == null && root.right == null){return 1;}return getLeafSize2(root.left)+getLeafSize2(root.right);}

求第K层节点的个数

    public int getKLevelSize(Node root , int k){if(root == null){return 0;}if(k==1){return 1;}return getKLevelSize(root.left,k-1) + getKLevelSize(root.right,k-1) ;}

获取二叉树的高度

  1. 当前root 的高度等于 左树的高度和右树高度的最大值 +1;
    public int Hight(Node root){if(root == null){return 0;}int leftHight = Hight(root.left);int rightHight = Hight(root.right);return (leftHight > rightHight ? leftHight : rightHight) + 1;}

查找节点

按照前序遍历的方式寻找,一旦找到,立即返回,不要继续在其他位置查找

子问题思路
1.判断节点是否是要寻找的节点
2.再找左子树和右子树
3.如果左子树返回一个非空的节点,那么就不用判断右子树了

    public Node find(Node root ,String val){if(root == null){return null;}if(root.getVal() == val){return root;}Node leftNode = find(root.left,val);if(leftNode != null){return leftNode;}return find(root.right , val);}

检查两棵树是否相同

  1. 判断节点是否相同,如果都为空,相同,返回true;一个为空,一个不为空,返回false;都不为空,但是值不同,返回false;
  2. 判断左子树和左子树是否相同,右子树和右子树是否相同
    public boolean isSame(Node rootA , Node rootB){if(rootA == null && rootB == null){return true;}if(rootA == null || rootB == null){return false;}if(rootA.getVal() != rootB.getVal()){return false;}return isSame(rootA.left,rootB.left) && isSame(rootA.right,rootB.right);}

判断一颗树是否是另一棵树的子树

  1. 判断两棵树是否是相同的,相同的返回true
  2. 如果root为空了,proot一定不是root的子树
  3. 在判断proot是不是root的左子树,proot是不是root的右子树
    public boolean isChild(Node root,Node proot){if(isSame(root,proot)){return true;}if(root == null){return false;}return isChild(root.left,proot) || isChild(root.right,proot);}

前人栽树,后人乘凉,这棵二叉树早已枝繁叶茂,快来感受树荫下的清凉吧!!相关推荐

  1. 判断两棵二叉树是否同构,三种实现方式(递归、队列、堆栈)

    一.同构的概念: 给定两棵二叉树 T1 和 T2,如果T2可以通过若干次左右孩子互换就变成T1,那么我们称这两棵树是同构的 例1:下图两棵树同构,因为对T2,交换A左右孩子:交换B左右孩子,交换G左右 ...

  2. python代码判断两棵二叉树是否相同

    python代码判断两棵二叉树是否相同 给定两个二叉树,编写一个函数来校验它们是否相同.如果两个树在结构上相同,并且结点具有相同的值,则认为它们是相同的. 判断两个二叉树是否是相同的,相同的依据是 二 ...

  3. 手动创建一棵二叉树,然后利用前序、中序、后序、层序进行遍历(从创建二叉树到各种方式遍历)(含运行结果)

    手动创建一棵二叉树,然后利用前序.中序.后序.层序进行遍历 import java.util.LinkedList; import java.util.List; import java.util.Q ...

  4. 已知一棵二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法...

    已知一棵二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法 #define N 10 //二叉树节点的个数 char postorderstr[]={};//后序序列 char i ...

  5. 判断一棵二叉树是否为搜索二叉树、完全二叉树、平衡二叉树(java)

    平衡二叉树的解法:主要是求出二叉树的高度,若根节点的左子树的高度与右子树的高度差小于等于1,则表示该二叉树为平衡二叉树 public static class Node{public int valu ...

  6. 剑指offer:输入一棵二叉树,判断该二叉树是否是平衡二叉树。

    输入一棵二叉树,判断该二叉树是否是平衡二叉树. //后续遍历二叉树,遍历过程中求子树高度,判断是否平衡 class Solution { public:bool IsBalanced(TreeNode ...

  7. 经典面试题:给两个序列如何构造一棵二叉树

    微信搜一搜:bigsai 大家都在关注的刷题.学习数据结构和算法宝藏项目 关注回复进群即可加入力扣打卡群,欢迎划水.近期打卡: LeetCode 98验证二叉搜素树(中序遍历)&99恢复二叉搜 ...

  8. C语言求一棵二叉树所有根到叶的路径(附完整源码)

    C语言求一棵二叉树所有根到叶的路径 C语言求一棵二叉树所有根到叶的路径完整源码(定义,实现,main函数测试) C语言求一棵二叉树所有根到叶的路径完整源码(定义,实现,main函数测试) #inclu ...

  9. C语言递归遍历一棵二叉树(附完整源码)

    C语言递归遍历一棵二叉树 结点结构体定义 二叉树递归遍历方式 完整实现和main测试源码 结点结构体定义 struct node {struct node *leftNode;int data;str ...

最新文章

  1. QIIME 2用户文档. 12数据筛选Filtering data(2019.7)
  2. 王者荣耀装备测试软件,王者荣耀首度公开5v5 PVP自动化测试方案
  3. 全息归约,全息算法。
  4. canvas-应用大全
  5. 如何使用live writer客户端来发布CSDN的博客文章?
  6. mysql监控sql_关于对mysql语句进行监控的方法详解
  7. 理工大学统考计算机在线作业,北京理工在线作业-现代远程学习技术-20210417121542.pdf-原创力文档...
  8. Eclipse启动Tomcat时,45秒超时解决方案
  9. 人工智能你必须掌握的32个算法(二)归并排序算法
  10. python美多商城项目百度网盘_美多商城项目(十)
  11. 集成Slice2Java插件
  12. PMP第十三章:项目相关方管理
  13. 什么是DMZ区域,DMZ区域的作用与原理
  14. 聊聊Dubbo的注册中心、配置中心以及元数据中心
  15. “黑桃A” 11月19日团队实训总结
  16. 用 “类别混搭” 法实现移动游戏的创新
  17. 设计测试用例(蘑菇街web的登录页面)
  18. Matlab中安装NURBS工具箱及使用
  19. 什么是BIO | NIO | AIO
  20. Leetcode:面试题 01.06. 字符串压缩

热门文章

  1. 视频:扎克伯格夫妇带你参观当年哈佛宿舍 facebook诞生于此
  2. 磨金石教育摄影技能干货分享|简述特效在影视制作中的四大作用
  3. 让人震惊的锤子手机造假真相!
  4. arduino 鸿蒙,Arduino 开发板介绍及对比(上)
  5. 【女人该看,男人更该看】 两种老公,两种人生
  6. 《跟热饭一起学习vue吧》Part.22 组件带参数 Prop
  7. SpringBoot校园二手书管理系统
  8. 首次接触CefSharp
  9. iView表格自定义展开、render函数的使用
  10. 送 3 本IT精选书籍!