完全二叉树的概念

完全二叉树

若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层从右向左连续缺若干结点,这就是完全二叉树。

完全二叉树特点

一、叶子结点只可能在最大的两层上出现,对任意结点,若其右分支下的子孙最大层次为L,则其左分支下的子孙的最大层次必为L 或 L+1;

完全二叉树(Complete Binary Tree):

在最后一层,并不是所有节点都有两个子节点,这类二叉树又称为完全二叉树(Complete Binary Tree),入下图:

满二叉树(Full Binarry Tree):

所有的节点都有两个子节点,这类二叉树称作满二叉树(Full Binarry Tree),如下图:

时间: 2024-10-22 13:13:16

完全二叉树的概念的相关文章

计算完全二叉树所有节点数

今天在leetcode,遇见一个题目,计算一个完全二叉树所有的节点数.这里分享一下心得. 首先,需要完全掌握什么是完全二叉树? 我觉得对于完全二叉树的概念中,有一点需要注意.完全二叉树:除最后一层外,每一层上的节点数均达到最大值:在最后一层上只缺少右边的若干结点.最后一层的结点一定是向左靠.其主要思想是,想以某一个结点为“根结点”,然后,然后判断其是否是满二叉树,因为满二叉树是计算很简单2k - 1(k=1,2,3```),即对于满二叉树只需要计算出其深度即可,也就是利用满二叉树简化对完全二叉树

判断一棵二叉树是否是完全二叉树

题目:判断一棵二叉树是否是完全二叉树 思路: 1.首先明确完全二叉树的概念.完全二叉树除最后一层外,所有层结点数均达到最大值,最后一层结点连续集中在最左边.空树也是完全二叉树. 2.我们可以通过层序遍历的方式遍历这个二叉树,使用一个队列存储遍历的结点.可以利用最后一层的结点集中在左侧这个特性解题,具体看代码: 代码: bool isCompleteTree(pTree pT) { Queue q; initQueue(&q); Enqueue(&q,pT);//根入队 pNode ptr

京东一面

出来感觉无力的胳膊都抬不起来. 人生真的无比艰难,到处碰壁,没有人把你放在眼里,单薄的经历,可怜的知识面,见到人就露怯的习惯性表情,并不想说太多,但是忍不住想要吐槽.人生总是沉浸在各种各样的不甘心里,却又不肯付出自己的半分努力,呵呵. 一志愿投的研发-Java,二志愿投的测试. 一志愿看过去就是个普通的程序猿,毕竟我讲什么都get不到,自己也是觉得很迷幻,明明快排是过去之前刚刚看过的.问难了不会,问简单的说不清,也是无解.具体的问题顺序记不清了,面他家公司跟做他家笔试题一样的迷茫.,呵呵.困di

排序算法(OC版)

针对每个算法实现的代码没有单独上传到gitHub,有需要的来群里下载<欢迎大家加入iOS开发学习交流群:QQ529560119> 数据结构与算法的作用: 数据结构与算法相当于内功心法,而各种编程语言相当于武功的各种招式例如降龙十八掌等等.内功心法更扎实,打出来的招式才会更有伤害. 排序是计算机内经常进行的一种操作,其目的是将一组"无序"的记录序列调整为"有序"的记录序列. 排序算法是所有算法中最为常见的一种算法,例如,在学校上体育课,站队按照身高从低到高

浅谈数据结构-选择排序

选择排序:每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止. 选择排序正如定义所讲,在数组查询出最小值,然后放在此次循环开始位置(前一次循环已经获取比它更小的值放在前面). 简单选择排序就是单纯的从数组中一次一次循环获取到最小值,放到循环位置.而堆排序正如名字,是从一个堆中选择,然后放在堆的循环开始位置,所以重点就是如何争取获取堆(分组). 一.简单选择排序 1.算法思想 正如图上所示,每次选择最小值,然后放在本次循环的开始位置. 2.代码 //选择排

并发编程(十四)—— ScheduledThreadPoolExecutor 实现原理与源码深度解析 之 DelayedWorkQueue

我们知道线程池运行时,会不断从任务队列中获取任务,然后执行任务.如果我们想实现延时或者定时执行任务,重要一点就是任务队列会根据任务延时时间的不同进行排序,延时时间越短地就排在队列的前面,先被获取执行. 队列是先进先出的数据结构,就是先进入队列的数据,先被获取.但是有一种特殊的队列叫做优先级队列,它会对插入的数据进行优先级排序,保证优先级越高的数据首先被获取,与数据的插入顺序无关. 实现优先级队列高效常用的一种方式就是使用堆. 什么是堆? 堆通常是一个可以被看做一棵树的数组对象. 堆(heap)又

8个排序算法

#include <iostream> #include <vector> #include <algorithm> using namespace std; /* 1.插入排序.稳定 (1)原理:逐个处理待排序记录,每个记录与前面已排序子序列进行比较,将其插入子序列中正确位置 (2)复杂度:O(n)->O(n^2),O(n^2) 最佳:升序.时间复杂度为O(n) 最差:降序.时间复杂度为O(n^2) 平均:对于每个元素,前面有一半元素比它大.时间复杂度为O(n^

纯数据结构Java实现(4/11)(BST)

个人感觉,BST(二叉查找树)应该是众多常见树的爸爸,而不是弟弟,尽管相比较而言,它比较简单. 二叉树基础 理论定义,代码定义,满,完全等定义 不同于线性结构,树结构用于存储的话,通常操作效率更高.就拿现在说的二叉搜索树(排序树)来说,如果每次操作之后会让剩余的数据集减少一半,这不是太美妙了么?(当然不当的运用树结构存储,也会导致从 O(logN) 退化到 O(n)). 值得说明,O(logN) 其实并不准确,准确来说应该说 O(树的高度) 定义&性质&行话 树里面常见的二叉树: BST,

堆排序算法学习小记

1.完全二叉树的概念 若设二叉树的深度为h,除第 h 层外,其它各层 (1-h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树. 完全二叉树是由满二叉树而引出来的.对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树. (1)所有的叶结点都出现在第k层或k-l层(层次最大的两层) (2)对任一结点,如果其右子树的最大层次为L,则其左子树的最大层次为L或L+l. 一棵二叉树至多只有最下面