如何检查由数组表示的给定完整二叉树是否为值平衡二叉树?通过值平衡,我的意思是,如果对于每个节点,左侧节点的整数值之和为等于右手边的值之和。什么是C类算法? 很容易找出有子节点的节点的索引。但是我无法开发递归计算每个节点总和的逻辑。总和也需要以总和的方式计算。在特定节点下面的左子树的所有节点将等于它的右手计数器部分,并以类似的方式向下挖掘。如何使用数组?
答案 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*)
返回给定节点的值这个想法是进行一个后期遍历,将所有孩子的价值加到左边,得到总和,然后:
res
。