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

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

一个直观的想法, 就是观察一棵完全二叉树,来分析它到底有什么特征。

方法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;
}

 

  

posted on 2016-01-27 20:54  Johnson_Lu  阅读(6271)  评论(0编辑  收藏  举报