在练习二进制搜索树时寻求帮助。我无法弄清楚我的代码出了什么问题,因为它似乎遵循通用的递归格式。可能与临时节点或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;
}
}
答案 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;
}
您可以尝试执行相同的操作,以事后或事后分配节点。