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