java - 如何编写 'addToRightMostChildAsLeftChild(Node a,Node b)'的代码?

标签 java binary-tree traversal

假设上面的方法有两个参数a和b:

  • a :表示树的根节点,我们需要遍历该树,直到得到正确的节点
  • b :表示要添加到 a 最右边节点作为左子节点的节点。

我只需要知道如何将一个`节点添加到树的最右边的节点,但作为左子节点。我实际上正在解决 this 的不同版本问题。这里的问题是使用右指针

构造一棵树,仅通过左指针遍历它会生成树的前序遍历

实际上可以通过遍历树并维护一个前一个节点并以我们想要的方式链接它们来解决:prev.left = current`。

我解决这个问题的方法是: 假如有一棵树如下

(只需将节点 2 到 5 添加为左子节点 然后 5 到 3 作为左 child ,最后 6 到 4 作为左 child 。)

                 10
                 / \
                8   2
               / \ / \
              3  5 4  6


               10
               /
              8
             / \
            3   5
               /
              2
             / \
            4   6

             10
             /
            8
           / 
          3
         /
        5
       /
      2 
     / \
    4   6
             10
             /
            8
           / 
          3
         /
        5
       /
      2
     /
    4
   /
  6

10 8 3 5 2 4 6 这是树的前序遍历

我知道可以通过使用`prev指针并做一些事情来完成。我希望这样做。

                 10        
                 / \
                8   2      
               / \ / \
              3  5 4  6

                 ||
                 \/

                10
               /
              8
             / 
            3
           /
          5
         /
        2
       /
      4
     /
    6

节点定义为:

 class Node{
    int data;
    Node left,right;
    Node(int d)
    {
        data=d;
        left=null;
        right=null;
    }
}

最佳答案

经过深思熟虑,我能够做到。

void addToRightMostNodeAsLeftChild(Node root,Node toBeAdded)
{
    if(root.left==null)
    {
        root.left=toBeAdded;
    }
    else
    {
        Node k=getRMNode(root.left);
        if(k.left==null)
        {
            k.left=toBeAdded;
        }
        else
            addToRightMostNodeAsLeftChild(k, toBeAdded);
    }
    root.right=null;
}

因此,当我想将节点 2 作为 5 的左子节点(即节点 8 的最右节点)时(作为左子节点添加到某些 XYZ 节点的最右边节点(XYZ 在此为 8) 调用该方法时如下:

addToRightMostNodeAsLeftChild(root,X) /*root represents node 10 and X represents node 2*/

它被转换为:

           10
           /
          8
         / \
        3   5
           /
          2
         / \
        4   6

关于java - 如何编写 'addToRightMostChildAsLeftChild(Node a,Node b)'的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55675521/

相关文章:

java - 在单个 ListView 中左右对齐

java - 如何使用 Gson 从 JSON 输出访问特定元素

c - 在二叉树中插入一个元素

c - C 中的二叉树 - 问题

c# - 如何为动态 for 循环级别编码?

java - 优先考虑后面的实际正则表达式

java - 每次将对象添加到 ArrayList 时更新 double 值

c - 一棵二叉树中有多少个节点只有一个子节点?

使用字符串变量进行 JQuery 查找

jQuery - 遍历 xml 并创建它的列表