【问题标题】:Populating Next Right Pointers - Why Node.next is still null when passed recursively?填充下一个右指针 - 为什么递归传递时 Node.next 仍然为空?
【发布时间】:2022-01-18 02:20:07
【问题描述】:

我正在处理 Leet 代码问题116. Populating Next Right Pointers in Each Node

给你一棵完美二叉树,其中所有的叶子都在同一层,每个父母都有两个孩子。二叉树的定义如下:

struct Node {
  int val;
  Node *left;
  Node *right;
  Node *next;
}

填充每个 next 指针以指向其下一个右节点。如果没有下一个右节点,则下一个指针应该设置为NULL

最初,所有下一个指针都设置为NULL

我的解决方案是错误的。我的问题是关于我的这段代码:

    if(root.right==null){
        return null;
    }
    root.left.next = root.right;

    root.right.next=null;
    connect(root.left);
    connect(root.right);

    return root;

我将root.right分配给root.left.next,但我发现当connect(root.left)被传递时,next节点仍然是null。怎么还有这个null

【问题讨论】:

  • 我将 root.left.next 分配给 root.right 节点, - 如果你的意思是:root.left.next = root.right; 那么它会将 root.right 节点分配给 roor.left .next,与你所说的完全相反。这只是一个术语问题还是更多? a = b 表示“将 b 分配给 a”。
  • 你说得对,我描述错了

标签: java pointers nullpointerexception binary-search-tree


【解决方案1】:

让我们看一下示例树:

您的代码(即您共享的部分)将建立所有红色链接,除了节点 5 和 6 之间的链接,因为它们不是兄弟!它们不是同一个root 节点的左/右子节点。或者以不同的方式描述该问题:您的代码会将 all 右侧子项的 next 属性设置为 null。对于节点 3 和 7,这是正确的做法,但对于节点 5 则不然。树越高,其next 属性设置不正确的节点就越多。

所以你需要一个不同的算法。

提示:使用广度优先遍历而不是您已实现的深度优先遍历。

【讨论】:

    猜你喜欢
    • 2018-06-12
    • 1970-01-01
    • 2012-12-03
    • 2021-01-22
    • 2011-12-23
    • 2013-09-21
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    相关资源
    最近更新 更多