前人栽树,后人乘凉,这棵二叉树早已枝繁叶茂,快来感受树荫下的清凉吧!!
目录
- 二叉树的性质
- 求节点的个数
- 求叶子节点的个数
- 求第K层节点的个数
- 获取二叉树的高度
- 查找节点
- 检查两棵树是否相同
- 判断一颗树是否是另一棵树的子树
二叉树的性质
1、若规定根节点层数为1,一棵非空二叉树的第i层上最多有2的(i-1)次方个节点
2、高度为K的二叉树的最大节点数为2的K次方-1
3、一棵二叉树的叶子节点的个数为N1,非叶子节点的个数为N2,则N1=N2+1
4、具有n个节点的完全二叉树,其高度为log2(n+1)取整
求节点的个数
- 定义一个全局变量,通过前序遍历,中序遍历,后序遍历求节点的个数
static int size = 0;public void getSize1(Node root){if(root == null){return;}size++;getSize1(root.left);getSize1(root.right);}
- 左树的节点+右树的节点+本身(即为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;}
求叶子节点的个数
- 遍历思路,依旧是前序遍历的思路,定义一个静态变量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);}
- 子问题思路
左树的叶子节点+右树的叶子节点
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) ;}
获取二叉树的高度
- 当前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);}
检查两棵树是否相同
- 判断节点是否相同,如果都为空,相同,返回true;一个为空,一个不为空,返回false;都不为空,但是值不同,返回false;
- 判断左子树和左子树是否相同,右子树和右子树是否相同
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);}
判断一颗树是否是另一棵树的子树
- 判断两棵树是否是相同的,相同的返回true
- 如果root为空了,proot一定不是root的子树
- 在判断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);}
前人栽树,后人乘凉,这棵二叉树早已枝繁叶茂,快来感受树荫下的清凉吧!!相关推荐
- 判断两棵二叉树是否同构,三种实现方式(递归、队列、堆栈)
一.同构的概念: 给定两棵二叉树 T1 和 T2,如果T2可以通过若干次左右孩子互换就变成T1,那么我们称这两棵树是同构的 例1:下图两棵树同构,因为对T2,交换A左右孩子:交换B左右孩子,交换G左右 ...
- python代码判断两棵二叉树是否相同
python代码判断两棵二叉树是否相同 给定两个二叉树,编写一个函数来校验它们是否相同.如果两个树在结构上相同,并且结点具有相同的值,则认为它们是相同的. 判断两个二叉树是否是相同的,相同的依据是 二 ...
- 手动创建一棵二叉树,然后利用前序、中序、后序、层序进行遍历(从创建二叉树到各种方式遍历)(含运行结果)
手动创建一棵二叉树,然后利用前序.中序.后序.层序进行遍历 import java.util.LinkedList; import java.util.List; import java.util.Q ...
- 已知一棵二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法...
已知一棵二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法 #define N 10 //二叉树节点的个数 char postorderstr[]={};//后序序列 char i ...
- 判断一棵二叉树是否为搜索二叉树、完全二叉树、平衡二叉树(java)
平衡二叉树的解法:主要是求出二叉树的高度,若根节点的左子树的高度与右子树的高度差小于等于1,则表示该二叉树为平衡二叉树 public static class Node{public int valu ...
- 剑指offer:输入一棵二叉树,判断该二叉树是否是平衡二叉树。
输入一棵二叉树,判断该二叉树是否是平衡二叉树. //后续遍历二叉树,遍历过程中求子树高度,判断是否平衡 class Solution { public:bool IsBalanced(TreeNode ...
- 经典面试题:给两个序列如何构造一棵二叉树
微信搜一搜:bigsai 大家都在关注的刷题.学习数据结构和算法宝藏项目 关注回复进群即可加入力扣打卡群,欢迎划水.近期打卡: LeetCode 98验证二叉搜素树(中序遍历)&99恢复二叉搜 ...
- C语言求一棵二叉树所有根到叶的路径(附完整源码)
C语言求一棵二叉树所有根到叶的路径 C语言求一棵二叉树所有根到叶的路径完整源码(定义,实现,main函数测试) C语言求一棵二叉树所有根到叶的路径完整源码(定义,实现,main函数测试) #inclu ...
- C语言递归遍历一棵二叉树(附完整源码)
C语言递归遍历一棵二叉树 结点结构体定义 二叉树递归遍历方式 完整实现和main测试源码 结点结构体定义 struct node {struct node *leftNode;int data;str ...
最新文章
- QIIME 2用户文档. 12数据筛选Filtering data(2019.7)
- 王者荣耀装备测试软件,王者荣耀首度公开5v5 PVP自动化测试方案
- 全息归约,全息算法。
- canvas-应用大全
- 如何使用live writer客户端来发布CSDN的博客文章?
- mysql监控sql_关于对mysql语句进行监控的方法详解
- 理工大学统考计算机在线作业,北京理工在线作业-现代远程学习技术-20210417121542.pdf-原创力文档...
- Eclipse启动Tomcat时,45秒超时解决方案
- 人工智能你必须掌握的32个算法(二)归并排序算法
- python美多商城项目百度网盘_美多商城项目(十)
- 集成Slice2Java插件
- PMP第十三章:项目相关方管理
- 什么是DMZ区域,DMZ区域的作用与原理
- 聊聊Dubbo的注册中心、配置中心以及元数据中心
- “黑桃A” 11月19日团队实训总结
- 用 “类别混搭” 法实现移动游戏的创新
- 设计测试用例(蘑菇街web的登录页面)
- Matlab中安装NURBS工具箱及使用
- 什么是BIO | NIO | AIO
- Leetcode:面试题 01.06. 字符串压缩