面試題39 2 判斷一棵樹是不是平衡二叉樹

2021-07-02 17:21:50 字數 655 閱讀 4658

思想一:在求樹深度的基礎下,對每個節點的左右子樹求深度,按照定義,左右子樹的深度差不超過1就是平衡二叉樹。

缺點:需要重複遍歷

//求樹的深度

int treedepth(binarytreenode* proot)

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

bool isbalanced(binarytreenode* proot)

思想二:如果我們用後序遍歷的方式遍歷二叉樹的每乙個節點,在遍歷到乙個節點之前我們就已經遍歷了它的左右子樹,只要在遍歷每個節點的時候記錄它的深度,我們就可以一邊遍歷一邊判斷沒個節點是不是平衡的。

bool isbalanced(binarytreenode* proot,int *pdepth)

int left,right;

if(isbalanced(proot->m_pleft,&left)&&(isbalanced(proot->m_pright))

} return false; }

bool isbalanced(binarytreenode* proot)  

在上面**中,我們用後序遍歷的方式遍歷整顆二叉樹。在遍歷某節點的左右子節點之後,我們根據他的左右子節點的深度判斷他是否平衡,並得到當前節點的深度。當我們遍歷到根節點的時候,也就判斷了整顆二叉樹是不是平衡二叉樹。

如何判斷一棵樹是不是另一棵樹的子樹

package suanfatest class treenode treenode int value treenode int value,treenode leftchild,treenode rightchild public int getvalue public void setvalu...

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

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

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

將一顆二叉搜尋樹轉換成雙向鍊錶,既然可以轉換,那麼轉換過程中就可以進行判斷這是不是一顆二叉搜尋樹,注意在遞迴的過程中,需要將下乙個函式要比較的節點傳遞過去,這個需要放在遞迴函式中進行。tree plistnode nullptr bool issearchtree tree root,tree pl...