首页 > 其他 > 详细

二叉树: 判断二叉树是否为完全二叉树

时间:2020-04-13 12:51:34      阅读:82      评论:0      收藏:0      [点我收藏+]

 

问题描述:判断一棵二叉树是否为完全二叉树。

知识点:完全二叉树是指除二叉树的最后一层外,其他各层的节点数达到最大个数,且最后一层的叶节点从左到右连续存在,只缺右侧若干节点。

 

算法实现:

class Node {

public int value;
public Node left;
public Node right;

public Node(int value) {
this.value = value;
}
}


//is complete binary tree
public static boolean isCBT(Node head) {

if(head == null) {
return true;
}

Queue<Node> queue = new LinkedList<>();
boolean leaf = false;
Node leftN = null;
Node rightN = null;
queue.offer(head);
while (!queue.isEmpty()) {

head = queue.poll();
leftN = head.left;
rightN = head.right;
if((leftN == null && rightN != null) || (leaf && (leftN != null || rightN != null))) {
return false;
}
if(leftN != null) {
queue.offer(leftN);
}
if(rightN != null) {
queue.offer(rightN);
} else {
leaf = true;//叶子节点开始标志,若为“完全二叉树”则之后的待处理的节点都应为叶子节点
}
}

return true;
}

 

算法解析:

1.按层遍历二叉树,从每层的左边向右边依次遍历;

2.如果当前节点有右孩子,但没有左孩子,直接返回false;

3.如果当前节点并不是左右孩子都有,那之后的节点应都为叶节点,否则返回false;

4.设置初始标志位true, 如果遍历结束没有返回false,则为完全二叉树,返回最终结果true。

 

二叉树: 判断二叉树是否为完全二叉树

原文:https://www.cnblogs.com/heibingtai/p/12690548.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!