我已经制定出了如何将树叶从BST复制到另一个BST的算法。递归复制BST的所有树叶到另一个BST
- 检查如果树空
- 如果我们到达叶,将数据复制到目标BST。
- 调用与源BST - >左和源BST - >右递归函数与目的地的指针各自的方向
- 否则,递归调用没有dest - >左或dest - >右(因为我们会去为空)。
该算法是否可行?
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-> right和dest - >离开递归调用。
它应该工作,小心他们肮脏的细节。它错过了构建完美均衡BST的机会。 – greybeard
尝试一下:)然后询问https://codereview.stackexchange.com/他们认为它:) –
(@FilipHaglund我相信你建议StevenTea在[CR]上呈现它(https://codereview.stackexchange .com/help/on-topic) - 差不多)。刚注意到这个问题_does not_read_all nodes_。 – greybeard