Я работаю над вопросом, чтобы проверить, сбалансировано ли двоичное дерево структуры, и когда я запускаю код, я получаю EXC_BAD_ACCESS, и я не уверен, как решить проблему и что ее вызывает.
Предполагается, что код нажмет NULL и вернет (true, -1) в некоторой точке и go вглубь левого поддерева. Затем вернитесь и go к правому поддереву. Мы можем проверить, сбалансированы ли поддеревы левого и правого каналов разными, если оно <= 1., и получить его высоту по максимуму (слева, справа) +1 для каждого узла. если <= 1 означает несбалансированность возвратов (ложь, высоту), и она пузырится до рекурсии. </p>
Спасибо
#include <iostream>
using namespace std;
struct TreeNode {
TreeNode * left;
TreeNode * right;
};
class balanceStatusAndHeight{
public:
bool isBalanced;
int height;
balanceStatusAndHeight(bool isBalanced, int height);
};
balanceStatusAndHeight::balanceStatusAndHeight(bool isBalanced, int height) {
this->isBalanced = isBalanced;
this->height = height;
}
balanceStatusAndHeight checkBalance(TreeNode * root) {
if (root == NULL ) {
return balanceStatusAndHeight(true, -1);
}
balanceStatusAndHeight leftResult = checkBalance(root->left);
if ( !leftResult.isBalanced ) {
return leftResult;
}
balanceStatusAndHeight rightResult = checkBalance(root->right);
if ( !rightResult.isBalanced) {
return rightResult;
}
bool subTreesAreBalanced = abs(leftResult.height - rightResult.height) <= 1;
int height = max(leftResult.height, rightResult.height) + 1;
return balanceStatusAndHeight(subTreesAreBalanced, height);
};
int main(int argc, const char * argv[]) {
TreeNode *a = new TreeNode;
a->left = new TreeNode;
a->left->left = new TreeNode;
balanceStatusAndHeight c = checkBalance(a);
cout << c.isBalanced << endl;
return 0;
}