我正在写一个关于二叉树的家庭作业问题的方法。
目标:< br >给定一个二叉树,检查该树是否满足以下性质:对于每个节点,其左右子节点的值之和等于该节点的值。如果一个节点只有一个子节点,那么这个节点应该和那个子节点有相同的值。叶节点自动满足属性。
我得到一个错误,我的代码并不是对所有情况都正确。例如,如果我有一棵树
15
/
\ 5 10
当它应该是真的时候,我正在返回假的。
这是我目前的方法,我做错了什么?
boolean BTchecksum(BinNode root) {
if (root == null || root.left() == null && root.right() == null) {return true;}
BinNode leftNode = root.left();
BinNode rightNode = root.right();
int sum = (int)(leftNode.element()) + (int)(leftNode.element());
int value = (int)(root.element());
return (sum == value) && BTchecksum(root.left()) && BTchecksum(root.right());
}
修订(无NullPinterException)
public boolean BTchecksum(BinNode root)
{
if (root == null || root.left() == null && root.right() == null) {return true;}
int sum = 0;
if (root.left() != null){sum = sum + root.left().value();}
if (root.right() != null){sum = sum + root.right().value();}
return (sum == root.value()) && BTchecksum(root.left()) && BTchecksum(root.right());
}
现在,您可能会遇到空指针异常,因为您引用的子项可能为空。这可能不是最有效的解决方案,但它可以解决所有情况。
public boolean BTchecksum(BinNode root) {
if (root == null || root.right()==null && root.left()==null) {
return true;
}
if (root.right() == null) {
return (root.left().value() == root.value())
&& BTchecksum(root.left());
} else if (root.left() == null) {
return (root.right().value() == root.value())
&& BTchecksum(root.right());
} else {
return (root.value() == root.left().value() + root.right().value())
&& BTchecksum(root.left()) && BTchecksum(root.right());
}
你把总和写成:leftNode.element()) (int)(leftNode.element)));
应该是这样的:leftNode.element())(int)(rightNode.element )));
QSTN:当它是叶节点时,为什么需要初始化ls=0或rs=0。考虑链接中给出的树,如果我们到达节点4,如果(node==NULL isLeaf(node))返回1;上面的代码将1(true)返回到调用它的函数,即节点10,类似地,右侧将true返回到节点10,因此我们现在可以进入下面的循环,因为如果(isSumTree(node->left)&&isSumTree(node->left)&&isS
我想写一个方法来确定一棵树是否至少有一对相同的子树,这些子树的值和结构都必须相同。 假设给你一棵树,如下所示: 这将返回,因为我们有一对根为的相同树。 我的想法是遍历每个节点,构建一个映射到
如何检查由数组表示的给定完整二叉树是否是值平衡二叉树?我所说的值平衡是指,如果对于每个节点,左手边节点的整数值之和等于右手边的值之和。什么是类C算法?找出有孩子的节点的索引很容易。但是我无法开发递归计算每个节点总和的逻辑。还需要以这样一种方式计算总和,即特定节点下方左子树的所有节点的总和将等于它的右手对应物,并以类似的方式向下挖掘。怎么可能使用数组?
Childer Sum属性说,对于每个节点,数据值必须等于左右子节点中数据值的总和。我已经实现了一个递归函数,它检查二叉树是否满足该属性。但是代码为每棵树返回1。请帮助并告诉逻辑是否有问题?:)这是函数
我正试图解决这个问题,但我遇到了一些麻烦: 在二进制搜索树(BST)中: 节点左子树中每个节点的数据值小于该节点的数据值。 节点右侧子树中每个节点的数据值大于该节点的数据值。 如您所见,节点(4)位于节点(3)的左侧子树中,尽管4大于3,因此方法应该返回。但是,我的代码返回。 我怎么能控制这个案子?如何检查左/右子树中的所有值都低于/大于根(不仅是直接子树)?
说明 这一部分内容只是帮助理解 C++(11) 中左值与右值的概念。 在编程实践中,因为编译器优化的存在,特别是其中的返回值优化(Return Value Optimization, RVO)使你不需要额外关注左值与右值的区别,像 C++(03) 一样编程即可。 C++11 rvalues and move semantics confusion (return statement) - Stac