怎么判断一个二叉树是否是完全二叉树

 我来答
奈贝晨柔枝
2020-03-31 · TA获得超过3万个赞
知道大有可为答主
回答量:1.2万
采纳率:35%
帮助的人:941万
展开全部
完全二叉树(complete
binarytree)
若一棵二叉树至多只有最下面的两层上结点的度数可以小于2,并且最下一层上的结点都集中在该层最左边的若干位置上,则此二叉树称为完全二叉树。
特点:
(1)
满二叉树是完全二叉树,完全二叉树不一定是满二叉树。
(2)
在满二叉树的最下一层上,从最右边开始连续删去若干结点后得到的二叉树仍然是一棵完全二叉树。
(3)
在完全二叉树中,若某个结点没有左孩子,则它一定没有右孩子,即该结点必是叶结点。
利用特点进行判断
邱之槐巨洲
2020-04-08 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:30%
帮助的人:968万
展开全部
给你讲讲方法吧,实现就自己写了。
完全二叉树(Complete
Binary
Tree):
若设二叉树的高度为h,除第
h
层外,其它各层
(1~h-1)
的结点数都达到最大个数,第
h
层所有的节点都连续集中在最左边,这就是完全二叉树。
判断很简单,广度优先搜索整个二叉树,一旦找一个不含有子节点或者只含有一个左子节点之后,那么后续的所有节点都必须是叶子节点。否则,该树就不是完全二叉树。
实现的时候要用到队列。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
leitelyaya
2019-09-19 · 超过18用户采纳过TA的回答
知道答主
回答量:49
采纳率:0%
帮助的人:49.2万
展开全部
现在只说下原理,明天再编出来:
树的深度为K,则完全二叉树的小于k-1的层中,节点全部存在,并且,在第K层中(最后一层),到最右节点,没有存在空位置

#include

//完全二叉树
// 0
// / \
// 1 2
// / \ /
// 3 4 5

class Node
{
};

int main()
{
Node n[10];
//将节点按上面表示的顺序一个个放入数组中
//当然,这里依靠这个顺序的话,也可以用程序编出来
//假设放入了len个节点 len=5
int len=5;

//这因该是数学中的log..但我不知道怎么用..就实际代替了一下
//5比2的2次方,比2的3次方又小,所以得到二叉树深度为3,(即有三层)
int k=3;

//查找有无空的节点
for(int i=0;i<2*(k-1)-1;i++) //父节点层
{//判断出是否n[i]为空}
for(int i=2*k-1)-1;i<len;i++) //同等层
{//同上}
//在上面找到空的节点就说明不是完全二叉树
}
是模块化了的伪码,其中的细节只能依靠自己了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
秒懂百科
2021-02-18 · TA获得超过5.9万个赞
知道大有可为答主
回答量:25.3万
采纳率:88%
帮助的人:1.3亿
展开全部

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式