使用递归的镜像二进制搜索树

时间:2019-11-20 23:51:17

标签: java recursion binary-tree

在练习二进制搜索树时寻求帮助。我无法弄清楚我的代码出了什么问题,因为它似乎遵循通用的递归格式。可能与临时节点或return语句有关?任何帮助将不胜感激。

public static Node < Integer > mirror(Node < Integer > root) {

    if (root == null)
        return null;
    else {

        mirror(root.left);
        mirror(root.right);

        Node temp = root.left;
        root.left = root.right;
        root.right = temp;

        return root;

    }

} 

1 个答案:

答案 0 :(得分:0)

首先,似乎您没有为将要属于镜像树的节点分配内存。请注意,说明

Node temp;

不分配在堆中,而是在栈中。函数返回后,该内存将被释放,并且您在那里存储的任何内容都将毫无意义。

第二,看来您的遍历模式不是很清楚,我认为是因为行

root.right = temp;

存在一种不对称性。

除其他外,这是一种使用C ++伪代码的方法,用于获取使用预定模式的镜像二进制树:

Node * mirror(Node * root)
{
  if root == NULL
    return NULL;

  Node * mirror_root = new Node;
  mirror_root->left = mirror(root->right); // here is where the mirroring happens
  mirror_root->right = mirror(root->left);

  return mirror_root;
}

您可以尝试执行相同的操作,以事后或事后分配节点。