判斷乙個二叉樹是不是平衡二叉樹

2021-09-01 15:58:17 字數 871 閱讀 6223

題目: 輸入一棵二叉樹的根節點,判斷該樹是不是平衡二叉樹。

分析:首先要明白平衡二叉樹的概念:

平衡二叉樹必須滿足兩個條件:1)左右子樹的高度差不能大於1   2)每個根節點下面的左右子樹也必須滿足平衡二叉樹的性質。

對於本題,我們首先要知道如何去求一棵二叉樹的深度,接下來我們只需要判斷每個節點是否滿足平衡二叉樹的性質不就完了。所以就有了第一種方法的出現。

但是第一種方法有乙個問題就是,有些節點會被重複遍歷,為了克服這個問題,我們可以一邊遍歷一邊判斷每個節點是否平衡。

struct binarytreenode;

int gettreedepth(binarytreenode* pnode)

//1.時間複雜度為 o((logn)!) ,其中有些節點被重複遍歷了,效率不高

bool isbalanced(binarytreenode *pnode)

//2.更好的方法,這裡很好的解決了第一種方法的問題,就是遍歷每個節點的時候,我們用pdepth記錄其深度,

//那麼我們就可以一邊遍歷一邊判斷每個節點是不是平衡的

bool isbalanced(binarytreenode* pnode,int *pdepth)

int nleft, nright;

int ndiffindepth;

if (isbalanced(pnode->p_lefttreenode, &nleft) && isbalanced(pnode->p_righttreenode, &nright))

}return false;

}bool isbalanced(binarytreenode* pnode)

判斷二叉樹是不是平衡二叉樹

1.問題描述 輸入一棵二叉樹的根結點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意結點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。來自 劍指offer 2.分析 我們可以採用後續遍歷,在遍歷根結點之前就可以得到左右子樹的深度及是不是一顆平衡二叉樹。然後在根據左右子樹的深度差值來判斷這棵樹...

判斷二叉樹是不是平衡二叉樹

用後序遍歷的方式遍歷二叉樹的每乙個結點,在遍歷到乙個結點之前我們已經遍歷了它的左右子樹。只要在遍歷每個結點的時候記錄它的深度 某一結點的深度等於它到葉節點的路徑的長度 我們就可以一邊遍歷一邊判斷每個結點是不是平衡的。下面是這種思路的參考 bool isbalanced binarytreenode ...

判斷二叉樹是不是平衡

題目 輸入一棵二叉樹的根結點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意結點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。例如下圖 中的二叉樹就是一棵平衡二叉樹 上面的 固然簡潔,但我們也要注意到由於乙個節點會被重複遍歷多次,這種思路的時間效率不高。例如在函式 isbalance 中輸入...