这个问题在亚马逊的采访中提出。我试图找到解决方案但我没有得到解决方案。任何人都可以通过细节解决问题。
答案 0 :(得分:0)
这是一个相当标准的面试问题。
以这种方式思考这个问题,如果你站在镜子前面,你的树会是什么样子。我鼓励你实际绘制一棵简单的树,站在镜子前面画出它的样子。
完成此操作后,您可能已经意识到这个问题几乎与反转树相同。反转过程在每个级别都交换左右节点,并且当且仅当子节点存在时继续遍历。
这是一些让你开始的伪代码:
invert_bst(bst):
bst's left node = bst's right node
if bst's left child is not null:
invert_bst(bst left child)
if bst's right child is not null:
invert_bst(bst right child)
我强烈建议尝试实施此解决方案。
祝你未来的采访好运!
答案 1 :(得分:0)
很简单,镜像意味着原始节点的左节点成为镜像树的右节点。您可以使用预订定遍历并继续添加节点为左侧为原始右侧为镜像,右侧为原始左侧为镜像。
public Node createTreeMirror(Node root) {
if (root == null) {
return null;
}
Node mirror = new Node(root.data);
mirror.right = createTreeMirror(root.left);
mirror.left = createTreeMirror(root.right);
return mirror;
}