最近笔试接触到了很多二叉树的公式,但很奇怪的是没有汇总文章,接下来就我自己所见到的题型做个汇总。干货~
Q1.已知完全二叉树总结点数 N,求叶子结点数 n?
如果是偶数个节点,叶子节点等于总节点除以2, 即 N % 2==0, n = N/2
如果是奇数个叶子节点等于(总节点+1)除以2, 即 N % 2 == 1, n = (N+1)/2
即向上取整。
推导可参考:https://blog.csdn.net/stpeace/article/details/40210563
Q2. 已知完全二叉树叶子结点数n, 求总结点数N?
直接计算 : N = 2n
Q3. 已知长度150的队列,对满二叉树进行广度遍历,求二叉树的最大深度?(第一层深度为1)
满二叉树每一层的结点个数为(第一层深度为1)第n层的节点数:2^(n-1),
如果使用150的队列进行广度优先遍历,则每一层的节点数不大于150,
2^(n-1)≤150,2^7=128,2^8=256,n-1最多为7,所以最大深度n=8.
Q4.小根堆 8,15,10,21,34,16,12,删除8后重建堆,最后的叶子节点为?
用到向下调整:
删除8后,将12移动到堆顶,首先15、10比较选取最小的子节点,然后当前节点12和10比较并交换,最后比较16,故比较次数为3次。叶子结点为16。
Q5. 二叉树有着双分支结点数15,单分支结点数30,叶子节点数为?
16
根据二叉树的性质3,叶结点数n0与度为2的结点数n2的关系是:n0=n2+1。
一些性质:
1. 在非空二叉树中,第i层的结点总数不超过 2^(i-1) , i>=1;
2. 深度为h的二叉树最多有 2^h – 1 个结点(h>=1),最少有 h 个结点;
3. 对于任意一棵二叉树,如果其叶结点数为N0,而度数为2的结点总数为N2,则N0=N2+1;
4. 具有n个结点的完全二叉树的深度为(注:[ ]表示向下取整)
5. 若对一棵有n个节点的完全二叉树进行顺序编号(1≤i≤n),那么,对于编号为i(i≥1)的节点:
当i=1时,该节点为根,它无双亲节点 。
若2i≤n,则有编号为2的左叶子,否则没有左叶子 。
若2+1≤n,则有编号为2i+1的右叶子,否则没有右叶子 。
6. n个节点的二叉树一共有((2n)!)/(n! * (n+1)!)种
7. 二叉树节点计算公式 N = n0+n1+n2,度为0的叶子节点比度为2的节点数多一个。
N=1*n1+2*n2+1
8. 对任何一棵二叉树T,如果其终端节点数为n0,度为2的节点数为n2,则
n0=n2+1
一些概念:
①结点:包含一个数据元素及若干指向子树分支的信息 。
③叶子结点:也称为终端结点,没有子树的结点或者度为零的结点 。
④分支结点:也称为非终端结点,度不为零的结点称为非终端结点 。
⑤树的度:树中所有结点的度的最大值 。
⑥结点的层次:从根结点开始,假设根结点为第1层,根结点的子节点为第2层,依此类推,如果某一个结点位于第L层,则其子节点位于第L+1层 。
⑦树的深度:也称为树的高度,树中所有结点的层次最大值称为树的深度。
1、满二叉树
高度为h,由2^h-1个节点构成的二叉树称为满二叉树。
2、完全二叉树
完全二叉树是由满二叉树而引出来的,若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数(即1~h-1层为一个满二叉树),第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。
堆一般都是用完全二叉树来实现的。
3.二叉树遍历
前序遍历(前根遍历):根——>左——>右
中序遍历(中根遍历):左——>根——>右
后序遍历(后根遍历):左——>右——>根
已知前序和中序,求后序问题, 前序 ABDGCEFH 中序 DGBAECHF
解法:根据前序、中序综合判断画出树的节点图,然后再写后序遍历:DGBEHFCA
(前序和中序的子树也满足前序或中序的规则)
参考:
https://baike.baidu.com/item/%E4%BA%8C%E5%8F%89%E6%A0%91
https://blog.csdn.net/qq_33401691/article/details/78021446
https://blog.csdn.net/stpeace/article/details/40210563
欢迎补充和指正!不定时更新。