在Java中插入二叉树

u7up0aaq  于 2022-09-17  发布在  Java
关注(0)|答案(3)|浏览(237)

你好
我是Java新手,我有一个问题,不知是否有人可以帮助我?
我有以下代码要插入到二叉树中:

public void insert(int data) { 
      root = insert (root,data); 
}   
/* recursive helper */ 
private Node insert(Node node, int data) { 
      if (node == null) 
            node = new Node(data); 
      else if (data < node.data) 
            node.left = insert(node.left, data); 
      else 
            node.right = insert(node.right, data); 
      return (node); 
}  

我浏览了这段代码,发现当最后插入(Node-Node,int-data)时
从递归返回,它返回了刚创建的节点,因此
替换了“根”的值。但是当我在
打印出“根”的“数据”,我看到“根”中的“数据”从未改变
正确(和预期结果)。
我想知道是否有人能告诉我为什么“根”的值在
每次调用insert(Node-Node,int-data)时,它都返回一个新的“Node”。
提前非常感谢您,
秋野

7lrncoxx

7lrncoxx1#

理解为什么这个问题不起作用的关键是知道Java将对象作为引用传递,而这些引用是通过值传递的。
在对“节点插入(节点节点,整数数据)”的第一个函数调用中;
节点是根的副本,对节点所做的任何更改只影响临时节点变量。
根不受影响。
http://stackoverflow.com/questions/4...-pass-by-value

uqdfh47h

uqdfh47h2#

此外,您需要将节点向左或向右移动以使递归工作。

6jygbczu

6jygbczu3#

尝试以下代码

public class BinarytreeInsert {   
    public static void main(String[] args) { 
        new BinarytreeInsert().run(); 
    }   
    static class Node {   
        Node left; 
        Node right; 
        int value;   
        public Node(int value) { 
            this.value = value; 
        } 
    }   
    public void run() { 
        Node rootnode = new Node(25); 
        System.out.println("Building tree with root value " + rootnode.value); 
        System.out.println("================================="); 
        insert(rootnode, 11); 
        insert(rootnode, 15); 
        insert(rootnode, 16); 
        insert(rootnode, 23); 
        insert(rootnode, 79);   
    }     
    public void insert(Node node, int value) { 
        if (value < node.value) { 
            if (node.left != null) { 
                insert(node.left, value); 
            } else { 
                System.out.println("  Inserted " + value + " to left of Node " + node.value); 
                node.left = new Node(value); 
            } 
        } else if (value > node.value) { 
            if (node.right != null) { 
                insert(node.right, value); 
            } else { 
                System.out.println("  Inserted " + value + " to right of Node " + node.value); 
                node.right = new Node(value); 
            } 
        } 
    } 
}  

程序输出

  Building tree with root value 25 
================================= 
  Inserted 11 to left of Node 25 
  Inserted 15 to right of Node 11 
  Inserted 16 to right of Node 15 
  Inserted 23 to right of Node 16 
  Inserted 79 to right of Node 25  

相关问题