2017-05-16 120 views
-2

我學習Java,和我有一些問題:二叉搜索樹遞歸插入方法

這是一個binary search tree,我想創建insert方法。我做了什麼錯?

我覺得leftrightNode,但我不知道如何使用它,因爲Node我知道像

public Node(int data, Node next) 

我有什麼做的?

public class BST { 
private Comparable key; 
private BST left, right; 

public BST(Comparable key) { 
    this.key = key; 
    this.left = null; 
    this.right = null; 
} 

public boolean insert(Comparable key) { 
    if (key.compareTo(this.key) < 0) { 
     if (this.left == null) { 
      System.out.println(key + " : insert success"); 
      this.left = left; 
      return true; 
     } else { 
      insert(key); 
     } 
    } else if (key.compareTo(this.key) > 0) { 
     if (this.right == null) { 
      this.right = right; 
      System.out.println(key + " : insert success"); 
      return true; 
     } else { 
      insert(key); 
     } 
    } 
    System.out.println(key + " : insert fail"); 
    return false; 
} 
public static void main(String[] args) { 
    BST b = new BST("B"); 

    System.out.println("========== insert =========="); 
    b.insert("G"); 
    b.insert("D"); 
    b.insert("K"); 
    b.insert("A"); 
    b.insert("D"); 
    b.insert("J"); 
    b.insert("H"); 
    b.insert("C"); 
    b.insert("A"); 
    b.insert("F"); 
    b.insert("E"); 
    b.insert("N"); 
} 

}

回答

0

你是不是做正確的插入,當你發現的位置,你需要創建一個新的密鑰生成新的節點,使之葉,例如在你的第一次檢查

 if (key.compareTo(this.key) < 0) { 
    if (this.left == null) { 
     System.out.println(key + " : insert success"); 
     this.left = new BST(key); 
     return true; 
    } else { 
     return insert(key); 
    } 

您還需要檢查發送的密鑰是否已插入並返回true。

+0

this.left = new BST(key);中存在java.lang.StackOverflowError; – cardiban

+0

是的,你有你的代碼中的幾個問題,但這是概念,我修改了一些我的代碼 –

+0

我可以知道你的代碼是什麼嗎? – cardiban