大家好,我试图了解如何看待二叉树是否平衡。我试图打印出cout语句,以便进一步了解它,但没有运气。
算法的想法是,如果它返回-1则不平衡,如果返回其他任何东西则是平衡的。
但是,我并没有真正掌握这个算法的确切运作方式。 但我想知道的是一些事情;
int checkBalance(node *root)
{
if (root == NULL) return 0;
int left = checkBalance(root->left);
int right = checkBalance(root->right);
//cout << "Root: " << root->key << " Left: " << left << ", Right: " << right << endl;
if (left == -1 || right == -1) return -1;
if (abs(left-right) > 1) return -1;
if (left > right) return left+1;
return right+1;
}
我的困惑之处在于以下几行代码:
if(left> gt; right)返回左+ 1;
int left = checkBalance(root-&gt; left);
感谢您花时间阅读,我尝试自己研究这个问题,但我很难理解这段代码是如何工作的。
完整代码:http://pastebin.com/raw/VaiUNVdJ(案例6检查,案例1添加节点)
答案 0 :(得分:-1)
这是基本的BBT检查。它检查子树是否平衡。如果不是,则返回-1;如果是这样,它会返回深度。
在伪代码中:
解决您的具体问题:
这是否足以让你解开?
让我们使用你给出的节点值,使用树根结构49,子句48和51,中缀符号可能如下所示:
(48, 49, (50, 51, 52))
以更严格的形式,
49->left = 48
49->right = 51
51->left = 50
51->right = 52
There are no other children
在开始时使用root = node 49,我们得到
int left = checkBalance(root->left); // returns depth of 1
int right = checkBalance(root->right); // returns depth of 2
现在,左&lt;正确,因此最终比较返回右+ 1或3,这是正确的树深度。