2017-07-13 95 views
1

這是我寫的用於創建二叉樹並在其中插入元素的Java程序。但是,我無法編寫程序來遞歸地插入元素,因此必須分別手動指定左側和右側的子元素。如何遞歸插入二叉樹並遞歸地打印元素?

這裏是我的代碼:

public class BinTree { 

private Node root; 

private class Node { 
Node left; 
Node right; 
int data; 

private Node(int data) { 
    this.data = data; 
    left = null; 
    right = null; 
} 
} 
public BinTree() { 
root = null; 
} 
public void preorder(Node temp) { 
temp = root; 
if(temp != null) { 
    System.out.print(temp.data + " "); 
    preorder(temp.left); 
    preorder(temp.right); 
} 
} 
public void add() { 

root = new Node(10); 
root.left = new Node(20); 
root.right = new Node(30); 
root.left.left = new Node(40); 
root.left.right = new Node(50); 
root.right.left = new Node(60); 
} 
public static void main(String[] args) { 

BinTree bt = new BinTree(); 
bt.add(); 
System.out.print(bt.root.data); 
System.out.print(" " + bt.root.left.data); 
System.out.print(" " + bt.root.right.data); 
System.out.print(" " + bt.root.left.left.data); 
System.out.print(" " + bt.root.left.right.data); 
} 
} 

此外,序遍歷我寫了上面的程序失敗,我得到了一些無休止的輸出。不得不殺死執行!

因此,如果有人能夠提供給我遞歸插入元素到二叉樹的正確實現,那將是非常有幫助的。

另外,如果可能的話,你能告訴我在我的前序遍歷中我犯了什麼錯誤嗎?

在此先感謝!

+0

您不清楚如何遞歸插入節點;爲此目的的功能需要有一個關於如何找到插入位置的標準。 – Codor

+0

是的,這正是我卡住的地方!在上次插入後,我無法找到下一個插入點的位置! – doctorwho

回答

2

要回答這個問題的部分原因,preorder函數包含一個錯誤,因爲它並不實際遍歷樹,而是從根開始一次又一次。將其更改爲

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

並用樹的根作爲參數進行調用。

+0

非常感謝! :)它的工作....並感謝你的解決方案,我也相應地實現了find()函數(類似的邏輯)。不過,我仍然堅持遞歸插入。任何幫助? – doctorwho