1.問題描述
輸入一棵二叉樹的根結點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意結點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。(來自《劍指offer》)
2.分析
我們可以採用後續遍歷,在遍歷根結點之前就可以得到左右子樹的深度及是不是一顆平衡二叉樹。然後在根據左右子樹的深度差值來判斷這棵樹是不是一棵平衡二叉樹。
3.**
int isbalanced(treenode* head,int* depth)
int left;
int right;
if (isbalanced(head->lchild,&left) && isbalanced(head->rchild,&right))
}return 0;
}
判斷二叉樹是不是平衡二叉樹
用後序遍歷的方式遍歷二叉樹的每乙個結點,在遍歷到乙個結點之前我們已經遍歷了它的左右子樹。只要在遍歷每個結點的時候記錄它的深度 某一結點的深度等於它到葉節點的路徑的長度 我們就可以一邊遍歷一邊判斷每個結點是不是平衡的。下面是這種思路的參考 bool isbalanced binarytreenode ...
判斷二叉樹是不是平衡
題目 輸入一棵二叉樹的根結點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意結點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。例如下圖 中的二叉樹就是一棵平衡二叉樹 上面的 固然簡潔,但我們也要注意到由於乙個節點會被重複遍歷多次,這種思路的時間效率不高。例如在函式 isbalance 中輸入...
判斷是不是平衡二叉樹
問題 給出一棵二叉樹,判斷它是不是二叉樹。乙個比較容易想到的做法是,採用動態規則的方法依次求出每乙個節點的左子樹深度和右子樹深度,兩者相減,絕對值大於 1 則不是平衡樹。為了避免重複計算節點的深度,應該用後序遍歷的方法,即先計算子節點的深度,再計算當前節點的深度,這樣不會出現重複計算。如下 stru...