題目描述:輸入一棵二叉樹的根結點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意結點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。
2.1 方法一
思路:在遍歷樹的每乙個節點的時候,呼叫treedepth函式得到它的左右子樹的深度,如果每個節點的左右子樹的深度相差都不超過1,那麼按照定義它就是一棵平衡二叉樹。
int treedepth(const binarytreenode* proot)
bool isbalanced_solution1(const binarytreenode* proot)
2.2 方法二
思路:如果我們用後序遍歷的方式遍歷二叉樹的每個節點,那麼在遍歷乙個節點之前我們就已經遍歷的它的左右子樹,只要在遍歷每個節點的時候記錄它的深度(某乙個節點的深度等於它到葉結點路徑的長度),我們就可以一邊遍歷一遍判斷每個節點是不是平衡的。
bool isbalanced_solution2(const binarytreenode* proot)
bool isbalanced(const binarytreenode* proot, int* pdepth)
int left, right;
if(isbalanced(proot->m_pleft, &left)
&& isbalanced(proot->m_pright, &right))
}return false;
}
平衡二叉樹的判定
題目內容 編寫程式判斷給定的二叉樹是否是平衡二叉樹。輸入 二叉樹的先序序列。輸出 如果是平衡二叉樹,輸出yes 否則輸出no 樣例輸入 ab c 樣例輸出 yes 下面來看 include include using namespace std struct tree void init tree ...
Leetcode 平衡二叉樹判定
判斷給定的二叉樹是否是平衡的 在這個問題中,定義平衡二叉樹為每個節點的左右兩個子樹高度差的絕對值不超過1的二叉樹 思路 一棵樹是平衡二叉樹 那麼對於root節點 其左右子樹都是平衡二叉樹 並且root左右子樹高度之差不大於1 在遞迴返回的時候,順帶返回高度,並且一旦出現不平衡的情況,立即結束整個判斷...
二叉樹深度和平衡二叉樹的判定
對於二叉樹的深度的求解,利用遞迴的方式求解很簡單 下面就來設計這個遞迴演算法 要求乙個節點的高度,先求左子樹的高度,然後再求解右子樹的高度。最後樹的高度就是1 max left depth,right depth int leftlen depth tree root left int rightl...