完全二叉樹的定義: 一棵二叉樹,除了最后一層之外都是完全填充的,並且最后一層的葉子結點都在左邊。
一個直觀的想法, 就是觀察一棵完全二叉樹,來分析它到底有什么特征。


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