2016-11-18 237 views
-1

我正在學習java。我在某處看到了這個代碼。 以下代碼是否正確地遍歷它?結果列表是否被正確調用?它會正確追加嗎?爲了遍歷二叉樹

public void traverse(Node<T> input, List<T> resultlist) { 
    if (input != null) { 
     traverse(input.getLeftNode(), resultlist) 

     resultlist.add(input.getValue()) 

     traverse(input.getRightNode(), resultlist) 
    } 
} 
+0

在中間線上,我認爲'result'應該是'resultlist'。 – nvioli

+1

[二叉樹的有序迭代器]的可能重複(http://stackoverflow.com/questions/12850889/in-order-iterator-for-binary-tree) – rbucinell

+0

請增加關於節點類的更多細節 –

回答

1

通過詢問是否它做一箇中序遍歷(這是否做它應該做的),我猜你只是不明白遍歷之間的區別...

底漆:

爲了真正理解這一點,你需要了解數據結構的一個重要方面:遞歸。這是你需要掌握的東西。這可能需要一些,並嘗試不同的練習後,它只會點擊。

下面是該上手的資源:

http://www.programmerinterview.com/index.php/recursion/explanation-of-recursion/

現在來到你的樹遍歷的問題,典型的約定如下:

預購:

traversalFunction(Node) 
    doStuffWithNode(Node) //prechild traversal 
    traversalFunction(Node.left) 
    traversalFunction(Node.right) 

按序

traversalFunction(Node) 
    traversalFunction(Node.left) 
    doStuffWithNode(Node) //within child traversal 
    traversalFunction(Node.right) 

後訂購:

traversalFunction(Node) 
    traversalFunction(Node.left) 
    traversalFunction(Node.right) 
    doStuffWithNode(Node) //post child traversal 

因此,要回答你的問題......如果你有一個在左,與執行節點上的操作方法右遍歷然後是的它是一個有序的遍歷。這就是你正在做的。

您在這裏可以找到的遍歷的更多信息: https://en.wikipedia.org/wiki/Tree_traversal

現在爲你的代碼的其餘部分的正確性,我不能確定,因爲你真的沒有輸入您的Node類或任何的任何信息。