【问题标题】:Cannot modify binary tree node in JavaScript无法在 JavaScript 中修改二叉树节点
【发布时间】:2020-05-26 08:11:01
【问题描述】:

这是 JavaScript 中二叉树节点的定义。

 function TreeNode(val, left, right) {
     this.val = (val===undefined ? 0 : val)
     this.left = (left===undefined ? null : left)
     this.right = (right===undefined ? null : right)
 }

我目前正在尝试反转二叉树。这是完整的代码。

var invertTree = function(root) {
    if(root === null) return null
    else return invertTreeHelper(root, root.left, root.right)
};

var invertTreeHelper = function(node, left, right) {
    if(left === null && right === null) { return node } 
    else if(left === null && right !== null) {
            left = right
            right = null
            invertTreeHelper(node, left.left, left.right)
            return node
    } else if(left !== null && right === null) {
            console.log(right)
            right = left
            console.log(right)
            console.log(node)
            left = null
            invertTreeHelper(node, right.left, right.right)
            return node
    } else {
        console.log("swapping " + left.val + " and " + right.val)
        let temp = left.val
        left.val = right.val
        right.val = temp
        invertTreeHelper(node, left.left, right.right)
        invertTreeHelper(node, left.right, right.left)
        return node
    }
};

但是,这是我遇到问题的部分。其他一切正常。

else if(left !== null && right === null) {
            console.log(right)
            right = left
            console.log(right)
            console.log(node)
            left = null
            invertTreeHelper(node, right.left, right.right)
            return node
    }

所以在上面显示的部分中,我尝试将空节点与非空(现有节点)交换,但它似乎并没有修改原始树,因为当我在交换节点后打印节点时,我可以看到它正确交换但原始树没有被修改(它在原始树中保持为空)。我试过node.left 而不是仅仅调用left ,当我这样做时,它似乎像我想要的那样修改了原始树,但我很困惑,因为在代码的另一部分如下所示,我能够通过调用left.val 而不是node.left.val 正确交换值,当我打印树时,我看到原始树中的值实际上已被修改。所以也许我要问的是为什么用left.val 交换值而不调用node.left.val 似乎会修改原始树,但为什么只用left 交换节点而不调用node.left 不会。这是我交换值并修改原始树的部分。

else {
        console.log("swapping " + left.val + " and " + right.val)
        let temp = left.val
        left.val = right.val
        right.val = temp
        invertTreeHelper(node, left.left, right.right)
        invertTreeHelper(node, left.right, right.left)
        return node
    }

我是树新手,所以请告诉我我缺少什么。谢谢。

【问题讨论】:

    标签: javascript binary-tree


    【解决方案1】:

    我相信您需要分配返回值 - 否则您的递归函数实际上无法正常工作。也许是这个?

    node = invertTreeHelper(node, left.left, right.right)
    node = invertTreeHelper(node, left.right, right.left)
    

    【讨论】:

      猜你喜欢
      • 2019-12-28
      • 2022-11-30
      • 1970-01-01
      • 1970-01-01
      • 2017-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多