Я выполнил приведенный ниже код 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 Confusing. Что вы имеете в виду? – user25004