首页 > 其他 > 详细

如何判断一棵二叉树是完全二叉树

时间:2016-01-27 21:22:20      阅读:220      评论:0      收藏:0      [点我收藏+]

完全二叉树的定义: 一棵二叉树,除了最后一层之外都是完全填充的,并且最后一层的叶子结点都在左边。

方法1:

  • 按层遍历二叉树, 从每层从左向右遍历所有的结点
  • 如果当前结点有右孩子, 但没有左孩子, 那么直接返回false
  • 如果当前结点并不是左右孩子都有, 那么它之后的所有结点都必须为叶子结点, 否则返回false
  • 遍历结束后返回true
public class TreeNode
{
    public TreeNode(int v)
	{
	    Val = v;
	}
	
	public int Val { get; private set;}
	public TreeNode Left { get; set; }
	public TreeNode Right { get; set; }
}

public bool IsCompleteBinaryTree(TreeNode root)
{
    if(root == null) return true;
	
    Queue<TreeNode> queue = new Queue<TreeNode>();
	queue.Enqueue(root);
	
	bool shouldBeLeaf = false;
	while(queue.Count > 0)
	{
	        var node = queue.Dequeue();
		if(shouldBeLeaf && (node.Left != null || node.Right != null))
		{
		    return false;
		}
		
		if(node.Left == null && node.Right != null)
		{
		    return false;
		}
			
		if(node.Left != null)
		{
		    queue.Enqueue(node.Left);
		}
		
		if(node.Right != null)
		{
		    queue.Enqueue(node.Right);
		} 
		else 
		{
		    shouldBeLeaf = true;
		}
	}
		
    return true;
}

 

  

如何判断一棵二叉树是完全二叉树

原文:http://www.cnblogs.com/johnson-lu/p/5164523.html

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