問題:給出一棵二叉樹,判斷它是不是二叉樹。
乙個比較容易想到的做法是,採用動態規則的方法依次求出每乙個節點的左子樹深度和右子樹深度,兩者相減,絕對值大於 1 則不是平衡樹。為了避免重複計算節點的深度,應該用後序遍歷的方法,即先計算子節點的深度,再計算當前節點的深度,這樣不會出現重複計算。
**如下:
struct tree
;static const int max_balance_diff = 1;
static const int int_size = 8 * sizeof(int);//當前計算機中乙個 int 佔幾個位元組
int fastabs(int n)
int max(int a,int b)
int treedepth(const tree *thetree,bool * const isbalance)
if(null == thetree)
tree *left = thetree->left;
tree *right = thetree->right;
int leftdepth = 0,rightdepth = 0;
leftdepth = treedepth(left,isbalance);
rightdepth= treedepth(right,isbalance);
if(max_balance_diff < fastabs(leftdepth - rightdepth))
return 1 + max(leftdepth,rightdepth);
}bool isbanlacetree(const tree *thetree)
判斷二叉樹是不是平衡
題目 輸入一棵二叉樹的根結點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意結點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。例如下圖 中的二叉樹就是一棵平衡二叉樹 上面的 固然簡潔,但我們也要注意到由於乙個節點會被重複遍歷多次,這種思路的時間效率不高。例如在函式 isbalance 中輸入...
判斷二叉樹是不是平衡
題目 輸入一棵二叉樹的根結點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意結點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。例如下圖 中的二叉樹就是一棵平衡二叉樹 2上面的 固然簡潔,但我們也要注意到由於乙個節點會被重複遍歷多次,這種思路的時間效率不高。例如在函式 isbalance 中輸...
判斷二叉樹是不是平衡二叉樹
1.問題描述 輸入一棵二叉樹的根結點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意結點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。來自 劍指offer 2.分析 我們可以採用後續遍歷,在遍歷根結點之前就可以得到左右子樹的深度及是不是一顆平衡二叉樹。然後在根據左右子樹的深度差值來判斷這棵樹...