简体   繁体   English

Java递归二进制搜索树

[英]java-recursive binary search tree

I've written a boolean insert method that inserts values into a binary search tree which inserts the value if the value is not already there and returns true if so, and returns false if the value is already there so inserts nothing. 我编写了一个布尔插入方法,该方法将值插入二进制搜索树,如果该值尚不存在,则插入该值;如果已经存在,则返回true;如果该值已存在,则返回false,因此不插入任何内容。 I am trying to convert this iterative method into all recursion with no loops at all but I am having trouble with figuring out how. 我试图将这种迭代方法转换为完全没有循环的所有递归,但是我在弄清楚如何做上遇到了麻烦。 Any help is appreciated! 任何帮助表示赞赏!

public boolean insert(int value) {
    Node travel= root, prev= null, newNode;
    boolean result= true;

    while (travel != null && travel.data != value) {
      prev= travel;
      if (value < travel.data)
        travel= travel.left;
      else travel= travel.right;
    }

    if (travel != null)
      result= false;
    else
      if (root == null)  
        root= new Node(value);
      else
        if (value < prev.data)
          prev.left= new Node(value);
        else prev.right= new Node(value);

    return result;
  }

http://www.java2s.com/Code/Java/Collections-Data-Structure/BinaryTree.htm http://www.java2s.com/Code/Java/Collections-Data-Structure/BinaryTree.htm

public class BinarySearchTree {

    private Node root;

    public boolean insert(int value) {
        if (root == null) {
            root = new Node(value);
            return true;
        } else {
            return insert(root, value);
        }
    }

    private boolean insert(Node node, int value) {
        if (value < node.value) {
            if (node.left != null) {
                return insert(node.left, value);
            } else {
                node.left = new Node(value);
                return true;
            }

        } else if (value > node.value) {
            if (node.right != null) {
                return insert(node.right, value);
            } else {
                node.right = new Node(value);
                return true;
            }

        } else {
            return false;
        }
    }

    public void printInOrder(Node node) {
        if (node != null) {
            printInOrder(node.left);
            System.out.println("Traversed " + node.value);
            printInOrder(node.right);
        }
    }

    public static void main(String[] args) {
        BinarySearchTree t = new BinarySearchTree();
        System.out.println("insert 5: " + t.insert(5));
        System.out.println("insert 4: " + t.insert(4));
        System.out.println("insert 7: " + t.insert(7));
        System.out.println("insert 4: " + t.insert(4));
        t.printInOrder(t.root);
    }
}

class Node {

    Node left;
    Node right;
    int value;

    public Node(int value) {
        this.value = value;
    }
}

You may try the following: 您可以尝试以下方法:

public boolean insert(int value) {
    return insert(value, root);
}

public boolean insert(int value, Node explore) {

    if (explore != null) {
        if (value < explore.data) {
            if (explore.left != null) {
                return insert(value, explore.left);
            } else {
                explore.left = new Node(value);
                return true;
            }
        } else if (value > explore.data) {
            if (explore.right != null) {
                return insert(value, explore.right);
            } else {
                explore.right = new Node(value);
                return true;
            }
        } else {
            // In this case the value already exists
            return false;
        }
    } else {
        explore = new Node(value);
    }
    return true;                
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM