满二叉树

数据结构之二叉树

限于喜欢 提交于 2020-03-16 14:57:13
某厂面试归来,发现自己落伍了!>>> 概念: 二叉树是一种特殊的树,其每个节点最多只能有两个子节点。其左子树和右子树是有顺序的,顺序不能颠倒。即使只有一个节点,也要区分左右子树。 斜树: 二叉树中每个节点只有相同方向,全部节点只有左子节点的称为左斜树,只有右子节点的称为右斜树。 满二叉树: 所有的分支节点都具有左子树和右子树,所有的叶子节点都在同一层上,满二叉树追求树的平衡。 满二叉树具备一下特点: 叶子节点只能出现在最下面一层。 非叶子节点的度数一定是2。 在同样深度的二叉树中,满二叉树的节点个数最多,叶子树最多。 完全二叉树: 对一棵具备n个节点的二叉树,对每个节点按照层序编号。如果编号为i的节点,与同样深度的满二叉树编号为i的节点在二叉树的同样位置,那么这棵二叉树就是完全二叉树。满二叉树一定是完全二叉树,完全二叉树不一定树满二叉树。 完全二叉树具备以下性质: 叶子节点只能出现在最下一层。 最下层的叶子节点一定出现在左部的连续位置。 倒数第二层的叶子节点一定出现在右部的连续位置。 同样节点数的二叉树,完全二叉树的深度最小。 性质: 一般二叉树的性质: 在非空二叉树的i层上,最多有2^(i-1)个节点。 在深度为k的二叉树上,最多有2^k-1个节点。 对于一棵非空的二叉树,如果叶子节点的个数为n0,度数为2的节点的个数为n2,则有n0=n2+1。 在一棵二叉树中,除了叶子节点

数据结构 - 树、二叉树、完全二叉树、真二叉树、满二叉树

血红的双手。 提交于 2020-03-10 10:13:07
01-树 节点的度:子树的个数。 树的度:所有节点度中的最大值。 叶子节点:度为0的节点。 非叶子节点:度不为0的节点。 层数:根节点在第一层,根节点的子节点在第二层,以此类推 节点的深度:从根节点到当前节点的唯一路径上的节点总数。 节点的高度:从当前节点到最远叶子节点的路径上的节点总数。 树的深度:所有节点深度中的最大值。 树的高度:所有节点高度中的最大值。 树的深度等于树的高度。 有序树:树中任意节点的子节点之间有顺序关系。 02-二叉树及其性质 二叉树: 每个节点的度最大为2(最多拥有2棵子树) 左子树和右子树是有顺序的。 即使某节点只有一棵子树,也要区分左右子树。 非空二叉树的第i层,最多有2^(i-1)个节点(i>=1) 在高度为h的二叉树上最多有2^h-1个节点(h>=1) 对于任何一棵非空二叉树,如果叶子节点个数为n0,度为2的节点个数为n2,则有:n0=n2+1 假设度为1的节点个数为n1,那么二叉树的节点总数 n = n0 + n1 + n2 二叉树的边数 T = n1 + 2*n2 = n-1 = n0 + n1 + n2 -1 03-真二叉树、满二叉树 真二叉树:所有节点的度要么是0,要么是2。 满二叉树:所有节点的度要么是0,要么是2。并且所有叶子节点都在最后一层. 在同样高度的二叉树中,满二叉树的叶子节点数量最多、总节点数量最多。 满二叉树一定是真二叉树

二叉堆/堆排序概念理解以及Java语言实现(学习笔记)

允我心安 提交于 2020-02-04 09:07:40
二叉堆/堆排序概念理解以及Java语言实现(学习笔记) 1.基础概念介绍 (1)满二叉树:每一层都达到了最大节点数,高度为h的满二叉树节点数为pow(2,h)-1 ( pow(x,y)代表x^y ) 如图所示: (2)完全二叉树:高度为h的二叉树每一个节点都和高度为h的满二叉树节点编号一一对应,那么它就是满二叉树。 如图所示: [1] 高度为h的完全二叉树节点数取值范围[pow(2,h-1),pow(2,h)-1],可见完全二叉树的高度是O( log(n) ) [2] 满二叉树是特殊的完全二叉树 [3]根节点编号记为1,对于节点i,它的左孩子编号为2i,右孩子编号为2i+1,对于节点i,它的父节点为floor(i/2) (floor表示向下取整)。完全二叉树适合用顺序存储结构来表示 (4)二叉堆概念: [1] 首先是一颗完全二叉树 [2] 小根堆:任何一个节点小于等于它的左孩子且小于等于他的右孩子 [3] 大根堆:任何一个节点大于等于它的左孩子且大于等于他的右孩子 举个例子(大根堆): 2.堆排序 [1] 堆排序属于选择排序,第i趟在n-i+1个元素中选择最大(值),作为子序列的第i个元素。 [2]和AVL树、红黑树、B树和B+树不同,他们是用于 查找 的,但堆是用于 排序 的。 2.1 建立大根堆 (在已有序列基础上建立) 设序列长度为n,则最后一个父节点编号为floor(n/2

判断是否是满二叉树

北战南征 提交于 2020-01-30 15:42:05
public static class Node { public int value; public Node left; public Node right; public Node(int data) { this.value = data; } } public static boolean isFull(Node head){ ReturnData allInfo=process(head, 1); return ((1<<allInfo.level)-1==allINfo.nums; } public static class ReturnData{ public int level; public int nums; public ReturnData(int l, int n){ level=l; nums=n; } } public static ReturnData process(Node head, int level){ if(head==null){ return new ReturnData(level, 0); } ReturnData leftInfo = process(head.left, level+1); ReturnData rightInfo = process(head.right, level+1); int nums =

特殊二叉树

↘锁芯ラ 提交于 2020-01-28 23:52:46
一:斜树 所有的结点都只有左子树的二叉树叫左斜树。所有结点都是只有右子树的二叉树叫右斜树。这两者统称为斜树。 左斜树: 右斜树: 二:满二叉树 在一棵二叉树中。如果所有分支结点都存在左子树和右子树,并且所有叶子都在同一层上,这样的二叉树称为满二叉树。 满二叉树的特点有: 1)叶子只能出现在最下一层。出现在其它层就不可能达成平衡。 2)非叶子结点的度一定是2。 3)在同样深度的二叉树中,满二叉树的结点个数最多,叶子数最多。 满二叉树: 三: 完全二叉树 完全二叉树:对一颗具有n个结点的二叉树按层编号,如果编号为i(1<=i<=n)的结点与同样深度的满二叉树中编号为i的结点在二叉树中位置完全相同,则这棵二叉树称为完全二叉树。 注意:满二叉树一定是一棵完全二叉树,但完全二叉树不一定是满二叉树。 特点: 1)叶子结点只能出现在最下层和次下层。 2)最下层的叶子结点集中在树的左部。 3)倒数第二层若存在叶子结点,一定在右部连续位置。 4)如果结点度为1,则该结点只有左孩子,即没有右子树。 5)同样结点数目的二叉树,完全二叉树深度最小。 //在判断一棵树是否是完全二叉树时,可以对照上面的特点进行判断。 来源: CSDN 作者: 酸菜。 链接: https://blog.csdn.net/qq_38158479/article/details/104102193

浅谈数据结构-二叉树

浪子不回头ぞ 提交于 2020-01-20 17:35:34
二叉树是树的特殊一种,具有如下特点:1、每个结点最多有两颗子树,结点的度最大为2。2、左子树和右子树是有顺序的,次序不能颠倒。3、即使某结点只有一个子树,也要区分左右子树。 一、特殊的二叉树及特点 1、斜树 所有的结点都只有左子树(左斜树),或者只有右子树(右斜树)。这就是斜树,应用较少 2、满二叉树 所有的分支结点都存在左子树和右子树,并且所有的叶子结点都在同一层上,这样就是满二叉树。就是完美圆满的意思,关键在于树的平衡。 根据满二叉树的定义,得到其特点为: 叶子只能出现在最下一层。 非叶子结点度一定是2. 在同样深度的二叉树中,满二叉树的结点个数最多,叶子树最多。 3、完全二叉树 对一棵具有n个结点的二叉树按层序排号,如果编号为i的结点与同样深度的满二叉树编号为i结点在二叉树中位置完全相同,就是完全二叉树。满二叉树必须是完全二叉树,反过来不一定成立。 其中关键点是按层序编号,然后对应查找。 在上图中,树1,按层次编号5结点没有左子树,有右子树,10结点缺失。树2由于3结点没有字数,是的6,7位置空挡了。树3中结点5没有子树。 上图就是一个完全二叉树。 结合完全二叉树定义得到其特点: 叶子结点只能出现在最下一层(满二叉树继承而来) 最下层叶子结点一定集中在左 部连续位置。 倒数第二层,如有叶子节点,一定出现在右部连续位置。 同样结点树的二叉树,完全二叉树的深度最小

二叉树,完美二叉树,满二叉树,完全二叉树

孤人 提交于 2020-01-13 14:15:41
二叉树 在计算机科学中,二叉树是每个结点 最多 有两个子树的树结构 下面这个就不是二叉树, B节点 下面右3个子节点 满二叉树与完美二叉树 国内的翻译和国外是有些对不上的\ 完美二叉树 英文: Perfect Binary Tree, 有时候在国内就叫 满二叉树 除了叶子结点之外的每一个结点都有两个孩子,每一层(当然包含最后一层)都被完全填充 满二叉树 英文: Full Binary Tree 除了叶子结点之外的每一个结点都有两个孩子结点( 只要你有孩子,你就必然是有两个孩子 ) 国内早期教材中,满二叉树一般指 perfect binary tree,所以会有满二叉树是完全二叉树的一个特例的说法 完全二叉树 除了最后一层之外的其他每一层都被完全填充,并且所有结点都保持向左对齐 完全二叉树的向左对齐 有点令人困惑, 英文的描述为: Every level except the last level is completely filled and all the nodes are left justified. 第 h 层所有的结点都连续集中在最左边,这就是完全二叉树 如果将编号11(K)结点从编号6(E)的左儿子位置移动到编号5(E)的右儿子位置,则变成一棵完全(Complete)二叉树。 结论就是: 向左对齐,就是要全部靠左边且连续,上图就是很好的反例

二叉树的相关知识点

一曲冷凌霜 提交于 2019-12-06 20:42:20
满二叉树: 定义: 除最后一层无任何子节点外,每一层上的所有结点都有两个子结点二叉树。 国内教程定义:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树。 最后一层的节点个数等于其他层数节点个数之和+1,假设第k层,最后一层的节点个数即2*(k-1) 完全二叉树: 定义: 若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边。 完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。 来源: https://www.cnblogs.com/OFSHK/p/11997507.html

19 二叉树的性质,满二叉树

孤街浪徒 提交于 2019-12-02 20:15:51
1.二叉树的第i层最多有2的i-1次个节点,最少有1个节点(每一层不能一个节点都没有) 2.深度为k的二叉树最多有(2的k次方 - 1 )个节点,最少有k个节点 3.任何一棵二叉树T,如果其叶子数为n0, 度为2的节点数为n2, 则: n0 = n2 + 1; 满二叉树 :一棵深度为k且有2的k次方 - 1 个节点的二叉树     等价于:每个节点都有两个孩子         每一层上的节点数都是最大节点数         叶子节点全部在最底层。     特点:在同样深度的二叉树中,节点个数最多,叶子节点个数最多。 对满二叉树节点位置编号:从根节点开始,自上而下,从左到右。 完全二叉树 : 一个深度为k的二叉树,对节点位置编号,若编号后每个节点的编号和对应满二叉树的对应位置的节点的编号都相同,此二叉树为完全二叉树. 特点:在满二叉树中,从最后一个节点开始, 连续地 去掉任意个节点,得到的都是完全二叉树. 叶子只可能分布在层次最大的两层上; 对任一节点,若其右子树的最大层次为i,则其左子树的最大层次为 i 或 i+1 性质: 来源: https://www.cnblogs.com/CPU-Easy/p/11762436.html