2013-12-08 10 views
0

type'a tree = |空| 'a *'節點樹*'樹*'樹參考;OCaml - 設置對inorder(二叉樹)中下一個節點的引用

我們想爲每個節點樹設置ref inorder中的下一個節點;

例如

Node (1, Node(2, Empty, Empty, ref Empty), Node(3, Empty, Empty, ref Empty), ref Empty)) 
The result is: 

Node (1, Node(2, Empty, Empty, content = {Node (1....) })..... 
+0

除非您向我們展示您編寫的一些代碼,並解釋其爲什麼以及如何不執行您想要的任務,否則很難在不破壞任務的情況下提供幫助。作爲一個普遍的暗示,我會說這需要摺疊。你必須決定爲最後一個節點做些什麼。 –

+0

我真的建議你學習ocaml和函數式編程。我想你的老闆讓你用ocaml來實現某些東西,但是你的java命令式的直覺將你引向邪惡。請,只要學習。 –

+0

如何在這種情況下使用摺疊? – user3077133

回答

0

不難:你做的序遍歷,同時通過各地(和 返回)包含在一個節點的參考。當給定節點獲得 時,將前一節點的參考設置爲 當前節點。如果每個節點都被分配到之前的參考節點,那麼意味着每個節點的引用都包含下一個節點。

在該實例中,序遍歷穿過樹本 順序:2 1 3

當你在節點2,則它的引用返回給調用者,這是 節點1當到達節點1,則將節點2的ref設置爲 指向節點1,並將節點1的ref傳遞給節點3.當 處於節點3時,將節點1的ref設置爲指向節點3.

您需要決定如何處理第一個節點(分配虛擬 引用來啓動進程)和最後一個節點(大概設置 對Empty的引用,儘管有時它可能對 將它設置爲第一個節點有用)。

我有工作代碼(15行)。我不會發布它,因爲這將 破壞假定的分配。