为什么镜像树在使用中序遍历访问所有节点时不起作用?

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-orderpostorder,这将是直截了当的。如果您热衷于使用 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);
    }

希望对您有所帮助!