描述:
輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。
在這裡,我們隻需要考慮其平衡性,不需要考慮其是不是排序二叉樹
平衡二叉樹(Balanced Binary Tree),具有以下性質:它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,并且左右兩個子樹都是一棵平衡二叉樹。
注:我們約定空樹是平衡二叉樹。
示例
輸入:{1,2,3,4,5,6,7}
傳回值:true
思路:單獨寫一個求二叉樹深度的函數,同之前的題目。
遞歸判斷,若空樹,則為true
若左右子樹深度之差的絕對值>1,則傳回false
傳回:當對左子樹和右子樹判斷結果的與值(&&)
即:當某節點的左右子樹深度不超過1時,判斷這個節點的左右子節點分别的左右子樹深度,若有一個內插補點>1,則true&&flase結果也為false,必須兩個同時為true,通過不斷遞歸,確定每一層的子樹全都符合條件,最後的結果才為true。
//本題測試用例
// 1
// / \
// 2 3
// / / \
// 4 5 6
// / \
// 7 8
var tree = {
value: 1,
left: {
value: 2,
left: {
value: 4
}
},
right: {
value: 3,
left: {
value: 5,
left: {
value: 7
},
right: {
value: 8
}
},
right: {
value: 6
}
}
}
function IsBalanced_Solution(pRoot) {
if(!pRoot) return true;
if(Math.abs(TreeDepth(pRoot.left)-TreeDepth(pRoot.right))>1) return false;
return IsBalanced_Solution(pRoot.left) && IsBalanced_Solution(pRoot.right)
}
function TreeDepth(node) {
return node? Math.max(TreeDepth(node.left),TreeDepth(node.right))+1:0;
}
console.log(IsBalanced_Solution(tree));//true