判斷搜尋二叉樹、完全二叉樹
如何判斷一棵樹是搜尋二叉樹
搜尋二叉樹的定義是:二叉樹中任一結點的右結點都比自己大,左節點都比自己小
判斷方式很簡單:二叉樹 中序遍歷 ,判斷遍歷的結點值是否是 升序 即可
如何判斷一棵樹是完全二叉樹
分兩種情況來判斷是否是完全二叉樹:
false
舉個例子,對於任意給定的二叉樹(例如下圖所示), 按層遍歷 ,依次判斷上面的情況

首先看0號結點,有左也有右;遍歷到1號結點,有左也有右;遍歷到2號結點,有左也有右;遍歷到3號結點,有左也有右;遍歷到4號結點,滿足上面第二種情況了,所以開啟一個階段,這個階段導致後面所有遍歷到的結點,必須是葉子結點;5是葉子結點,6是葉子節點,7,8,9都是葉子結點,此時遍歷完了,沒有任何錯誤,返回 true
還是上圖,如果將9改為4的右結點,當遍歷到4的時候,因為違反了第一條規則,所以直接返回 false
了
public static boolean isCBT(Node head) { if(head == null) return true; Queue<Node> q = new LinkedList<Node>(); boolean leaf = flase; Node l = null; Node r = null; q.offer(head); while(!q.isEmpty()) { head = q.poll(); l = head.left; r = head.right; if((leaf && (l != null || r != null)) || (l == null && r != null)) return false; if(l != null) q.offer(l); if(r != null); q.offer(r); else // l != null && r == null leaf = true; } return true; }