java中二叉搜索树的加法

vsikbqxv  于 2021-06-27  发布在  Java
关注(0)|答案(2)|浏览(335)

我有一段代码,用于在java中向二进制搜索树插入节点,如:

public class BST {
private Node head;

public BST() {
    this.head = null;
}

public void add(int data, Node head) {
    if (head == null)
        head = new Node(data);
    else {
        if (data < head.data)
            add(data, head.left);
        else
            add(data, head.right);
    }
}

public void add(int data) {
    add(data, this.head);
}

public void preOrder(Node head) {
    if (head != null) {
        System.out.print(head.data + " ");
        preOrder(head.left);
        preOrder(head.right);
    }
}

public void preOrder() {
    preOrder(this.head);
}

public static void main(String[] args) {
    BST bst = new BST();
    for (int i = 0; i < 10; i++) {
        bst.add(i);
    }
    bst.preOrder();
}
}

为什么我运行程序时不打印我的信息?谢谢你回答我的问题!!

cnh2zyt3

cnh2zyt31#

当递归返回时,不更新左/右指针。此外,局部变量head与示例变量不同。因此,当方法返回时,您创建的新节点将被丢弃。
这里有一个方法。
二等兵 add 方法返回更新的节点,该节点在递归返回时被(重新)分配。

private Node add(int data, Node node) {
    if (node == null)
        return new Node(data);
    else {
        if (data < node.data)
            node.left = add(data, node.left);
        else
            node.right = add(data, node.right);
    }
   return node;
}

public void add(int data) {
    this.head = add(data, this.head);
}
b1payxdu

b1payxdu2#

还有一个选择:

public void add(int data) {
    if(head == null) {
      this.head = new Node(data);
    }
    else {
      add(data, this.head);
    }
  }

  public void add(int data, Node node) {
    if(data < node.data) {
      if(node.left == null) {
        node.left = new Node(data);
      }
      else {
        add(data, node.left);
      }
    }
    else {
      if(node.right == null) {
        node.right = new Node(data);
      }
      else {
        add(data, node.right);
      }
    }
  }

相关问题