2014-03-27 137 views
0

我已經創建了一個程序,它將二進制搜索樹中用戶輸入的整數存儲起來,並且具有可以正常工作的前置,後置和有序遍歷的遞歸函數。我想要做的是按順序遍歷樹,並且在每個節點上我想打印存儲在那裏的數字以及節點中左邊和右邊的數字,或者節點是葉節點。 假設用戶進入整數1,4,11和12我希望我的輸出看起來像:打印二進制搜索樹按順序遍歷

1:右子樹:12

4:右子樹:11

11:葉子節點

12:左子樹:4 等

這裏是我使用該函數的代碼,當我跑我得到一個空指針異常的程序。

public synchronized void inorderTraversal() 
    { inorderHelper(root); } 

//遞歸方法序遍歷

private void inorderHelper(TreeNode node) 
    { 
     if (node == null) 
     return; 

    inorderHelper(node.left); 
    System.out.print(node.data + ": Left Subtree " + node.left.data +": Right Subtree " + node.right.data); 
    inorderHelper(node.right); 

    } 
+0

你的堆棧跟蹤在哪裏? – reto

+0

當您調用'inorderHelper(node.left)'和'inorderHelper(node.right)'時,您正在打印'node.left.data'和'node.right.data'。 – Kevin

回答

0

執行時,才應打印node.data,遞歸將打印左,右序樹木的護理。

4

機會是,你的遞歸帶你到你的樹(你葉)的底層,當你嘗試調用

node.left.data 

這是一個空=> NullPointerException異常。

正如其他人所說,只是讓你的遞歸來處理工作。

private void inorderHelper(TreeNode node) 
    { 
     if (node == null) 
     return; 

    inorderHelper(node.left); 
    System.out.print("Node data: " + node.data); 
    inorderHelper(node.right); 

    } 
+0

@ user3415930,這個答案對你有幫助嗎?通常情況下,如果確實如此,您可以對它進行升級並給它一個複選標記,以便回答者獲得一些積分。 –