首页 > 解决方案 > 为什么可以在函数中更改结构的内容

问题描述

这是一个惰性X化为a的操作BinTree,让我困惑的是为什么BST->Left在step①中不能改变,但是在step②或ster③中可以改变,我认为这三个步骤都在函数中,为什么会有区别在他们之间,如果有人可以帮助我,我将不胜感激!

 BinTree Insert( BinTree BST, ElementType X ){
    if(!BST){
        BST=(BinTree)malloc(sizeof(struct TNode));
        BST->Data=X;①
        BST->Left=NULL;
        BST->Right=NULL;
    }else{
        if(X<BST->Data){
            **BST->Left=**Insert(BST->Left,X);②
        }else{
            **BST->Right=**Insert(BST->Right,X);③
    }
    return BST;
} 

标签: cfunctionrecursionstructbinary-search-tree

解决方案


该函数处理指向二叉搜索树根节点的指针的副本。更改此语句中的副本

    BST=(BinTree)malloc(sizeof(struct TNode));

不影响作为参数传递给函数的原始指针。您必须将函数返回的指针分配给指向二叉搜索树根节点的原始指针,例如

BinTree root = NULL;
root = Insert( root, X );

在这些陈述中

        BST->Left  = Insert(BST->Left,X);
        BST->Right = Insert(BST->Right,X);

您正在分配数据,通过指针 BST 通过引用传递给 thj 函数的成员 Left 和 Right。


推荐阅读