价值平衡完整的二叉树

时间:2015-05-12 12:43:17

标签: c algorithm data-structures

如何检查由数组表示的给定完整二叉树是否为值平衡二叉树?通过值平衡,我的意思是,如果对于每个节点,左侧节点的整数值之和为等于右手边的值之和。什么是C类算法? 很容易找出有子节点的节点的索引。但是我无法开发递归计算每个节点总和的逻辑。总和也需要以总和的方式计算。在特定节点下面的左子树的所有节点将等于它的右手计数器部分,并以类​​似的方式向下挖掘。如何使用数组?

1 个答案:

答案 0 :(得分:2)

您可以对树进行post order traversal,对每个子树求和,并在返回根(每个子树的根)时,评估两个子树是否具有相同的权重。

类似C的伪代码:

res = 1; //global variable, can also be used as sending pointer to res instead
int verifySums(Node* root) {
   if (root == null) return 0;
   int leftSum = verifySums(getLeft(root));
   int rightSum = verifySums(getRight(root));
   if (leftSum != rightSum) res = 0;
   return leftSum + rightSum + getValue(root);
}

哪里

  • Node getLeft(Node*)正在返回指向Node的指针 参数的左子女
  • Node getRight(Node*)正在返回指向Node的指针 参数的正确孩子
  • int getValue(Node*)返回给定节点的值

这个想法是进行一个后期遍历,将所有孩子的价值加到左边,得到总和,然后:

  1. 验证是否正确 - 如果不是,则整个树的答案为否,并将其设置为res
  2. 求和两个总和+当前节点,并将其返回给父节点。