二进制搜索树:插入

时间:2015-07-27 13:50:06

标签: java arraylist binary-tree treenode

我正在练习二进制搜索树:在HackerRank上插入。这是问题陈述:

您将获得指向二叉搜索树的根的指针以及要插入树中的值。将此值插入二叉搜索树中的适当位置,并返回更新的二叉树的根。你只需要完成这个功能。

我提交了以下解决方案并通过了6个测试用例中的4个,并且6个测试用例中的2个失败了问题是我无法看到两个失败的测试用例,因此我不确定他们为什么失败。我试图创建自己的测试用例,它们似乎正常工作。你能想到我的解决方案不适合的任何测试用例吗?我希望有人能指出我正确的方向

 /* Node is defined as :
class Node 
int data;
Node left;
Node right;

*/

static Node Insert(Node root,int value)
{
   if (root == null){
       root = new Node();
       root.data = value;
       return root;
   }
   ArrayList<Node> list = new ArrayList<Node>();
   list.add(root);
   getNode(list,value);
   return root;
}

static void getNode(ArrayList<Node> list,int value){
    ArrayList<Node> newList = new ArrayList<Node>();
    for (int i=0;i<list.size();i++){
        newList.add(list.get(i).left);
        newList.add(list.get(i).right);
        if(list.get(i).left == null){
            list.get(i).left = new Node();
            list.get(i).left.data = value;
            return;
        }
        if(list.get(i).right == null){
            list.get(i).right = new Node();
            list.get(i).right.data = value;
            return;
        }
    }
    getNode(newList,value);
}

2 个答案:

答案 0 :(得分:0)

静态节点插入(节点根,int值)     {

   if(root == null)
   {
       Node new_node = new Node();
       new_node.data=value;
       root = new_node;
   }

if(value < root.data)
    {
    if(root.left != null)
        {
        Node.Insert(root.left,value);
    }
    else
        {
        Node new_node = new Node();
        new_node.data = value;
        root.left=new_node;
    }

}
if(value > root.data)
    {
    if(root.right !=null)
        {
         Node.Insert(root.right,value);
    }
    else
        {
        Node new_node = new Node();
        new_node.data=value;
        root.right=new_node;
    }

}
return root;
}

答案 1 :(得分:0)

二叉树的基本实现..希望这可以帮助你

 class Node {

  Integer data;

  Node left;

  Node right;

  Node(Integer data) {

    this.data=data;

    left=null;

    right=null;

  }

}

public class BinarySearchTree {

  private Node root;

  private Node searchElement;

  public BinarySearchTree() {

  root=null;

}

public void insert(Integer data) {

    if(root==null) {

        root=new Node(data);

        System.out.println("root");

                }else {

    root=insert(data,root);

    }

}

public Node insert(Integer data,Node traverse) {

    if(traverse==null){

        traverse=new Node(data);

                }

    else if(data<traverse.data){

        traverse.left=insert(data,traverse.left);

            }

    else {

        traverse.right=insert(data,traverse.right);

            }

    return traverse;

}


public Node search(int element,Node traverse) {

    if(traverse==null) {

        System.out.println("Element not found");

        return traverse;

    }else if(element<traverse.data) {

        traverse.left=search(element,traverse.left);

        return traverse;

    }else if(element>traverse.data) {

        traverse.right=search(element,traverse.right);

        return traverse;

    }else if(element==traverse.data) {

        System.out.println("element found");

        System.out.println(traverse);

        return traverse;

    }

    return traverse;

}

public void search(int element) {

    searchElement=search(element,root);

}

public static void main(String... args){

    BinarySearchTree bst=new      BinarySearchTree();

    bst.insert(10);

    bst.insert(12);

    bst.insert(6);

    bst.insert(100);

    bst.search(12);

}

}