我實現了下面的C++代碼片段,以檢查二叉樹是否平衡,即左右子樹的高度相差最多爲1.但是,我不確定是否它很有效,或者以不好的方式反覆檢查子樹。有人可以引導我嗎?檢查二叉樹是否平衡
unordered_map <Node*, int> height;
struct Node{
int key;
Node* left;
Node* right;
}
bool isBalanced(Node* root){
if (root == nullptr){
height[root] = -1;
return true;
}
if (!isBalanced(root->left)) return false;
if (!isBalanced(root->right)) return false;
height[root] = max(height[root->left], height[root->right]) + 1;
return (abs(height[root->left] - height[root->right]) < 1);
}
您可以'isBalanced'返回'int',-1不平衡或深度以其他方式。那麼你不需要額外的地圖 – Slava
有很多平衡的樹木,確切地說你的平衡。無論如何,你應該返回高度並比較左右子樹的高度。 –
@DieterLücking混亂。你什麼意思? – user25004