思想一:在求樹深度的基礎下,對每個節點的左右子樹求深度,按照定義,左右子樹的深度差不超過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...