如何判斷一棵二叉樹是完全二叉樹(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;
}

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM