这两个递归代码有什么区别?目的是翻转BST(镜像的每个左右子树),一个版本在下降时翻转,而另一个版本等到它到达底部然后翻转。因此,除了翻转发生的顺序之外,第1部分之前的第2部分之间有什么区别吗?
private void mirror(Node node) {
if (node == null) return;
1____________________________
// do the subtrees
mirror(node.left);
mirror(node.right);
2_________________________________
// duplicate this node to its left
Node temp = node.left;
node.left = node.right;
node.right = temp;
}
答案 0 :(得分:0)
假设有一棵树
1
2 3
4 5
6
如果你在第1部分之前调用第2部分,则第2个将与3,4交换,5和6交换为NULL(4的右子) 但如果你在第1部分之后调用第2部分,那么前6个将与NULL交换,然后4与5交换,然后2与3交换。 这意味着它们创建镜像的顺序(顺序)只有差异。