初学二叉树的初始化,为什么一定要定义一个指针型变量

根据视屏教程里的代码,第八行结构后定义了一个(星号)BiTree,但是程序里的所有二级指针变量前都加了取值符合(星号),不知道为什么要定义这个指针型的(星号)BiTree,于是稍作修改,将去掉并且整个程序只有一级指针,但是运行出错
请问原因是什么?

//以下是教学上的正确代码
#include <stdio.h>
#include <stdlib.h>
typedef char elemtype;
typedef struct BiTNode
{
    char data;
    struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

//创建一颗二叉树,约定用户用前序遍历方式输入数据 
void createBiTree(BiTree *T)
{
    char c;
    scanf("%c",&c);
    if(' '==c)
    {
        *T=NULL;
    }
    else
    {
        *T=(BiTNode*)malloc(sizeof(BiTNode));
        (*T)->data=c;
        createBiTree(&(*T)->lchild);
        createBiTree(&(*T)->rchild);
    }
} 

void visit(char c,int level)//访问二叉树节点的具体操作 
{
    printf("%c位于第%d层\n",c,level);
}
//前序遍历二叉树
void PreOrderTraverse(BiTree T,int level)
{
    if(T)
    {
        visit(T->data,level);
        PreOrderTraverse(T->lchild,level+1);
        PreOrderTraverse(T->rchild,level+1);
    }
} 

int main(int argc, char *argv[]) {
    int level=1;
    BiTree T=NULL;
    createBiTree(&T); 
    PreOrderTraverse(T,level);
    return 0;
}

//**********************
//**********************
//**********************
//以下为修改后不能正常运行的代码
#include <stdio.h>
#include <stdlib.h>
typedef char elemtype;
typedef struct BiTNode
{
    char data;
    struct BiTNode *lchild,*rchild;
}BiTree; 


void createBiTree(BiTree *T)
{
    char c;
    scanf("%c",&c);
    if(' '==c)
    {
        T=NULL;
    }
    else
    {
        T=(BiTree*)malloc(sizeof(BiTree));
        T->data=c;
        createBiTree(T->lchild);
        createBiTree(T->rchild);
    }
} 

void visit(char c,int level)//访问二叉树节点的具体操作 
{
    printf("%c位于第%d层\n",c,level);
}
//前序遍历二叉树
void PreOrderTraverse(BiTree *T,int level)
{
    if(T)
    {
        visit(T->data,level);
        PreOrderTraverse(T->lchild,level+1);
        PreOrderTraverse(T->rchild,level+1);
    }
} 

int main(int argc, char *argv[]) {
    int level=1;
    BiTree T;
    createBiTree(&T); 
    PreOrderTraverse(&T,level);
    return 0;
}
查看全部
no_russion
no_russion
2019/02/12 18:15
  • c语言
  • 点赞
  • 收藏
  • 回答
    私信
满意答案
查看全部

1个回复