首页 > 其他 > 详细

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

时间:2020-07-07 01:21:00      阅读:71      评论:0      收藏:0      [点我收藏+]

根据完全二叉树的定义,如果二叉树上某个结点有右孩子无左孩子则一定不是完全二叉树;否则如果二叉树上某个结点有左孩子而没有右孩子,那么该结点所在的那一层上,该结点右侧的所有结点应该是叶子结点,否则不是完全二叉树。

import java.util.LinkedList;
import java.util.Queue;
public class tmp {
	public static class Node{  //一个静态内部类
		int data;
		Node left;
		Node right;
		public Node(int data) {
			this.data = data;
		}
	}
	public static boolean isCompleteBtree(Node root) {
		if(root == null) {
			return true;
		}
		Queue<Node> queue = new LinkedList<Node>();
		queue.offer(root);
		boolean leaf = false;
		while(!queue.isEmpty()) {
			Node node = queue.poll();
			//左空右不空
			if(node.left == null && node.right != null) {
				return false;
			}
			//如果开启了叶子结点阶段,结点不能有左右孩子
			if(leaf && (node.left != null || node.right != null)) {
				return false;
			}
			//将下一层要遍历的加入到队列中
			if(node.left != null) {
				queue.offer(node.left);
			}
			if(node.right != null) {
				queue.offer(node.right);
			} else {
				leaf = true;
			}
		}
		return true;
	}
	public static void main(String[] args) {
		Node root = new Node(1);
		root.left = new Node(2);
		root.right = new Node(3);
		root.left.right = new Node(4);
		System.out.println(isCompleteBtree(root));
	}
}

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

原文:https://www.cnblogs.com/treasury/p/13258462.html

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