我已经制定出了如何将树叶从BST复制到另一个BST的算法。
这个算法会起作用吗?
434 int copy_leaves(node * source, node * & dest)
435 {
436 if (!source)
437 {
438 dest = NULL;
439 return 0;
440 }
441
442 if (!(source -> left) && !(source -> right))
443 {
444 dest = new node;
445 dest -> data = source -> data;
XXX dest -> left = dest -> right = NULL;
446 }
447
448 return copy_leaves(source -> left, dest) + //???
449 copy_leaves(source -> right, dest) + 1; //???
450 }
好的我尝试实现我的算法,但有几个错误。我不太清楚在哪里做递归调用。我知道我在两次调用后达到null(然后我们知道节点是一个叶子),这意味着我复制了数据。我不知道在哪里传递dest->右和dest - >留给递归电话。
答案 0 :(得分:1)
我不知道这是如何运作的。我会用一些缩进来回应这个:
BST_copy(src, dst)
# step 1
if tree is empty
<action not specified; assume return>
else
# step 2
if src is a leaf
copy data to the destination tree
# step 3
BST_copy(src->left, dst->left)
BST_copy(src->right, dst->right)
#step 4
else
BST_copy(src->left, dst)
BST_copy(src->right, dst)