判斷一棵樹是不是完全二叉樹

2021-10-03 18:11:55 字數 903 閱讀 5882

分析

假設一棵樹是完全二叉樹,層數為k,那麼可以得到以下結論:

1.前k-1層節點肯定都是飽和的,即到達了最大值;

2.第k-1層不一定所有的節點都有孩子節點,如果有孩子節點,那麼一定是左孩子節點。

所以我們要先找到第乙個孩子不全的節點,如果只有右孩子節點,那麼一定不是完全二叉樹。

找到第乙個不飽和節點後,後續所有節點不能有孩子節點。

步驟

1.按照層序遍歷的方式,找到第乙個不飽和節點,判斷其孩子是不是左孩子,不是直接返回false;

2.從該節點之後所有節點不能有孩子。如果有孩子,一定不是完全二叉樹。

**

/**

* public class treenode

* }*/class

solution

//樹非空,就找其第乙個不飽和節點,即只有乙個孩子節點

//按層序遍歷的方式找

queue

q =newlinkedlist

<

>()

; q.

offer

(root)

;boolean isleaforleft =

false

;//設定標誌位,找到第乙個不飽和節點後置為true。

while

(!q.

isempty()

)}else

else

if(cur.left != null)

else

if(cur.right != null)

else}}

return

true;}

}

判斷一棵樹是不是完全二叉樹

還有一種特殊的完全二叉樹就是葉子節點都在同一層的,如下圖 完全二叉樹定義,若設二叉樹的深度為h,除第 h 層外,其它各層 1 h 1 的結點數都達到最大個數,第 h 層所有的結點都連續集中在最左邊,這就是完全二叉樹。思路是 用bfs,一層一層的遍歷二叉樹的節點,一但遍歷到空節點,那麼不在往佇列裡加入...

判斷一棵樹是不是完全二叉樹

解題思路 設定乙個標誌位,判斷屬於哪個階段。階段一 任何乙個節點,一定有兩個子樹。階段二 任何乙個節點,一定沒有子樹。描述 public class completetree public boolean iscompletetree node root 設計標誌位進行階段轉化 boolean is...

判斷一棵樹是不是二叉搜尋樹

一 遞迴判斷 遞迴判斷時,在結點值為整型時,必須指定初始最小值為int min,最大值為int max,每次遞迴時,傳入上一層的結點值最為判斷依據。bool judgebst recur treenode node,int min,int max 二 非遞迴判斷 bst的中序遍歷,一定是乙個非遞減序...