二叉树 - 插入和镜像之间的区别?

时间:2015-01-31 16:47:21

标签: c pointers binary-tree

我们在insert / delete进行了哪些操作我们不在mirror

通过mirror我指的是切换树中每个节点的左右子节点。

我问的原因是,当涉及到insert时,如果您没有保存该函数返回的根,则会导致错误。 mirror也是如此。我假设mirror具有相同的要求(返回根节点),但事实并非如此。那是为什么?

如果相关(insert是针对BST实施的话),请查看我的代码:

插入:

Node *insert(Node *root,int val)
{
    Node *newNode=NULL;



    if(root==NULL)
    {
        newNode=(Node*) malloc(sizeof(Node));

        newNode->value=val;
        newNode->left=NULL;
        newNode->right=NULL;
        return newNode;
    }

    if(root->value>val)
    {
        root->left=insert(root->left,val);
    }
    else
    {
        root->right=insert(root->right,val);
    }

    return root;

}

镜:

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

    temp_left=root->left;
    root->left=root->right;
    root->right=temp_left;

    mirror(root->left);
    mirror(root->right);

}

1 个答案:

答案 0 :(得分:2)

注意这一行:

root->left=insert(root->left,val);

您可以在此处将insert()的结果分配给root->left。您需要insert()在此处返回node*指针,否则我们不知道malloc将新节点放在内存中的位置,因此您无法添加树的节点。

另一方面,mirror仅递归遍历树并交换一些已存在的指针。您永远不需要将结果mirror()分配给变量。