判斷二叉樹是否是平衡二叉樹

2021-08-11 21:16:45 字數 943 閱讀 7049

二叉樹的節點定義為

public

class treenode

}

二叉樹的深度:根節點到葉節點的最長路徑長度

平衡二叉樹:二叉樹中任一節點的左右子樹的深度相差不超過1

遞迴的方法**如下:

public boolean isbalanced(treenode root) 

intleft = getheight(root.left);

intright = getheight(root.right);

if(math.abs(left - right) <= 1 && isbalanced(root.left) && isbalanced(root.right))

return true;

return false;

} public

int getheight(treenode node)

上述方法有很多的重複計算,效能不是很好。是否能實現每個節點只遍歷一次呢,

可利用後序遍歷的方法,在遍歷每個節點的時候我們已經遍歷了它的左右子樹,且記錄下其深度

public

boolean

isbalanced(treenode root)

int depth = 0;

return isbal(root, &depth);

} public

boolean

isbal(treenode node, int* depth)

int left;

int right;

if(isbal(node.left, &left) && isbal(node.right, &right))

return

false;

}

判斷二叉樹是否是平衡二叉樹

平衡二叉搜尋樹 balanced binary tree 具有以下性質 它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。思路 如果一顆二叉樹的所有子樹都是平衡二叉樹,它一定是平衡二叉樹。include using namespace std typedef...

判斷二叉樹是否是平衡二叉樹

平衡樹 balance tree,bt 指的是,任意節點的子樹的高度差都小於等於1。力扣 110也有該題,可以用來驗證。如果二叉樹為空,返回true。計算出左子樹和右子樹的最大深度。如果左右子樹的最大深度的差值小於2,並且左 右子樹都是平衡二叉樹,則該二叉樹是平衡二叉樹。判斷二叉樹是否是平衡二叉樹 ...

判斷二叉樹是否是平衡二叉樹

include bits stdc h using namespace std define mem a,b memset a,b,sizeof a define pb push back typedef long long ll const int maxn 1e4 7 const int inf...