为什么镜像树在使用中序遍历访问所有节点时不起作用?
Why mirroring tree is not working when using inorder traversal to visit all the nodes?
所以基本上我需要编写一个镜像二叉树的函数。
[镜像树示例1
我的方法:访问所有节点一次并交换左右子节点。
要遍历我们可以使用三种遍历中的任何一种。
当我使用前序和后序时,我得到了想要的结果,但没有中序!
void asd(struct node* root)
{if(root == NULL)
return;
asd(root->leftChild);
struct node* t;
t=root->leftChild;
root->leftChild= root->rightChild;
root->rightChild =t;
asd(root->rightChild);
}
我的镜像中序遍历函数。
我无法理解为什么?
我认为问题出在你的遍历顺序上
所以,这就是我可以预见的事情 -
{if(root == NULL)
return;
非常好。然后你交换左child和右child -
struct node* t;
t=root->leftChild;
root->leftChild= root->rightChild;
root->rightChild =t;
到目前为止还不错,但是现在你的右 child 变成了你的左 child,左 child 变成了右 child。
现在你打电话给
asd(root->rightChild);
假设您正在处理右侧 child,但实际上您正在处理左侧 child,因为它已经交换了它的位置。
解决方案将是 pre-order
或 postorder
,这将是直截了当的。如果您热衷于使用 inorder,那么您将不得不稍微调整一下代码。进程再次向左 child,因为它最初是向右 child。
void asd(struct node* root)
{if(root == NULL)
return;
asd(root->leftChild);
struct node* t;
t=root->leftChild;
root->leftChild= root->rightChild;
root->rightChild =t;
asd(root->leftChild);
}
希望对您有所帮助!
所以基本上我需要编写一个镜像二叉树的函数。 [镜像树示例1
我的方法:访问所有节点一次并交换左右子节点。 要遍历我们可以使用三种遍历中的任何一种。 当我使用前序和后序时,我得到了想要的结果,但没有中序!
void asd(struct node* root)
{if(root == NULL)
return;
asd(root->leftChild);
struct node* t;
t=root->leftChild;
root->leftChild= root->rightChild;
root->rightChild =t;
asd(root->rightChild);
}
我的镜像中序遍历函数。 我无法理解为什么?
我认为问题出在你的遍历顺序上
所以,这就是我可以预见的事情 -
{if(root == NULL)
return;
非常好。然后你交换左child和右child -
struct node* t;
t=root->leftChild;
root->leftChild= root->rightChild;
root->rightChild =t;
到目前为止还不错,但是现在你的右 child 变成了你的左 child,左 child 变成了右 child。 现在你打电话给
asd(root->rightChild);
假设您正在处理右侧 child,但实际上您正在处理左侧 child,因为它已经交换了它的位置。
解决方案将是 pre-order
或 postorder
,这将是直截了当的。如果您热衷于使用 inorder,那么您将不得不稍微调整一下代码。进程再次向左 child,因为它最初是向右 child。
void asd(struct node* root)
{if(root == NULL)
return;
asd(root->leftChild);
struct node* t;
t=root->leftChild;
root->leftChild= root->rightChild;
root->rightChild =t;
asd(root->leftChild);
}
希望对您有所帮助!