相邻的二叉树

时间:2013-02-02 03:40:50

标签: ocaml

我正在编写一个带有2个二叉树(t1和t2)的函数,并生成一个新的树,它将t2放在t1的右下角。 t2附加到右子项为空的第一个节点,即使该节点不是叶子。

let rec adjoin_right (t1: 'a tree) (t2: 'a tree) : 'a tree

测试用例:

let test () : bool =
adjoin_right (Node (Empty, 1, Empty)) (Node (Empty, 2, Empty)) = 
Node(Empty, 1, Node (Empty, 2, Empty))
;; run_test "adjoin_right leaf" test

有人可以引导我朝着这个问题的正确方向前进吗?我知道我可能要编写辅助函数。

1 个答案:

答案 0 :(得分:2)

要进行递归工作,您只需要考虑两个问题:

  • 如果t1Empty,结果应该是什么?

  • 如果t1不为空,但是当您应用于t1的子树时,您有一个正常工作的函数,那么您将如何使用此函数来获得结果?

如果你能解决这些问题,那么你确实有一个适用于子树的功能。

修改

考虑递归情况。您有l(您的左子树),r(您的右子树)和v(节点中的值)。在FP中,您不会更改任何这些值。你想要做的是用正确的内容构造一个 new 树。那么,你如何递归地使用你的函数从这三个成分制作新的树?这并不难 - 实际上只是一行代码。