当前位置: 首页 > 知识库问答 >
问题:

检查左和右子值的总和是否与二叉树中的父值相等?

方轩昂
2023-03-14

我正在写一个关于二叉树的家庭作业问题的方法。

目标:< 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());

}

共有3个答案

施俊哲
2023-03-14

修订(无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());
}
卫彭亮
2023-03-14

现在,您可能会遇到空指针异常,因为您引用的子项可能为空。这可能不是最有效的解决方案,但它可以解决所有情况。

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());
}
湛功
2023-03-14

你把总和写成: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