镜像n-ary树?谁能解释一下?

时间:2017-07-23 07:14:37

标签: algorithm data-structures tree mirror

这个问题在亚马逊的采访中提出。我试图找到解决方案但我没有得到解决方案。任何人都可以通过细节解决问题。

2 个答案:

答案 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;
}