我正在编写一个带有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
有人可以引导我朝着这个问题的正确方向前进吗?我知道我可能要编写辅助函数。
答案 0 :(得分:2)
要进行递归工作,您只需要考虑两个问题:
如果t1
为Empty
,结果应该是什么?
如果t1
不为空,但是当您应用于t1
的子树时,您有一个正常工作的函数,那么您将如何使用此函数来获得结果?
如果你能解决这些问题,那么你确实有一个适用于子树的功能。
修改强>
考虑递归情况。您有l
(您的左子树),r
(您的右子树)和v
(节点中的值)。在FP中,您不会更改任何这些值。你想要做的是用正确的内容构造一个 new 树。那么,你如何递归地使用你的函数从这三个成分制作新的树?这并不难 - 实际上只是一行代码。