二叉樹的節點定義為
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...