首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中将二叉树转换为和树

在Java中将二叉树转换为和树
EN

Stack Overflow用户
提问于 2015-02-08 04:27:21
回答 1查看 975关注 0票数 2

参考文献我正在复制粘贴问题和C中的解决方案,我无法在Java中实现这一点。我主要理解这是因为在Java中,参数是通过值传递的,这导致了维护"old_value“状态的问题。但我甚至尝试用set和get将其更改为自定义的MyInt,但仍然无法工作。所以,也许我在这里也错过了别的东西。请给我建议。

给定一个二叉树,其中每个节点都有正负值。将其转换为树,其中每个节点都包含原始树中左右子树的和。叶节点的值被更改为0。

例如,下面的树

代码语言:javascript
复制
              10
           /      \
         -2        6
       /   \      /  \ 
      8     -4    7    5

应改为

代码语言:javascript
复制
             20(4-2+12+6)
           /      \
      4(8-4)      12(7+5)
       /   \      /  \ 
      0      0    0    0

代码:

代码语言:javascript
复制
int toSumTree(struct node *node)
{
    // Base case
    if(node == NULL)
      return 0;


// Store the old value
int old_val = node->data;

// Recursively call for left and right subtrees and store the sum as
// new value of this node
node->data = toSumTree(node->left) + toSumTree(node->right);

// Return the sum of values of nodes in left and right subtrees and
// old_value of this node
return node->data + old_val;

}

Java代码:

代码语言:javascript
复制
public static int sumTree(Node node){
        if(node == null)
            return 0;
        MyInt old_value = new MyInt(node.data);
        node.data = sumTree(node.left) + sumTree(node.right);
        return node.data + old_value.getData();
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-08 18:45:36

我做错测试了。同样的代码逻辑将在Java中工作,并在通过值传递的注释中正确地指出,这并没有什么区别,因为值正在被返回。以下是正在工作的Java代码:

代码语言:javascript
复制
public static int sumTree(TreeNode node){
        if(node == null)
            return 0;
        int old_value = node.value;
        node.value = sumTree(node.left) + sumTree(node.right);
        return node.value + old_value;
    }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28390563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档