當我在二叉搜索樹中實現插入和打印時。它只打印出第一個根節點。請幫助爲什麼?二叉搜索樹的基本實現,從學習它們開始並轉向更先進的東西,但卻陷入了第一步。它看起來不是將節點添加到根節點。似乎無法插入二進制搜索樹
class bstrees{
class Node
{
int data;
Node left;
Node right;
public Node(int data)
{
this.data=data;
this.left=null;
this.right=null;
}
}
Node root;
bstrees(){root=null;}
public void insert(int data){
root=insert_node(root,data);
}
public Node insert_node(Node r,int n){
if(r==null){
Node n1=new Node(n);
//root=n1;
return n1 ;
}
else if(root.data<=n){
insert_node(root.right,n);
}
else{
insert_node(root.left,n);
}
return r;
}
public void print_t(){
print_t(root);
}
private void print_t(Node r){
//System.out.println(r);
if(r!=null){
// System.out.println(r.left);
// System.out.println(r.right);
print_t(r.left);
System.out.println(r.data+" ");
print_t(r.right);
}
}
}
public class BST_prac {
public static void main(String[] args) {
// TODO Auto-generated method stub
bstrees b1=new bstrees();
b1.insert(5);
b1.insert(1);
b1.print_t();
}
}
它打印出僅5.
看起來乍一看/甚至沒有測試代碼,你可能想先檢查null,看看[這裏](http://stackoverflow.com/questions/5560679/inserting-nodes-into-a -java-tree-in-java-question) –
請閱讀有關Java命名約定。類名開始大寫;你不要縮寫(BinaryTree比bstree更好理解,不是它),而你只對_SOME_CONSTANTS使用_ char,而不是用於變量和方法名稱。 – GhostCat
對於下一個問題:您希望我們花時間爲您提供幫助,因此請您花時間妥善格式化您的源代碼。最後:擁有兩個**插入的公共方法只是一個超級混淆的界面(正如你先前看到我錯誤的答案時所看到的那樣)。事情是:你的代碼是**硬**閱讀;儘管它應該如此簡單。最後:您可以輕鬆**自己調試,只需在相關操作之後將打印語句放入您的代碼;或通過運行**調試器**。 – GhostCat