二叉树建立和遍历所遇到的问题——c语言没有引用的解决方案

在学习数据结构的过程中,二叉树是一个绕不过去的问题,关于二叉树我们不仅要了解二叉树如何建立,也要了解二叉树如何进行遍历,在一些acm或者某些学校的考研复试机试中可能会涉及到二叉树。

我们在解题或者实际应用过程中,首先会按照先序序列去建立二叉树,其过程在各大数据结构的书籍中不尽相同,应该是这样的。

typedef struct BTNode{
    char data;
    struct BTNode *lchild.*rchild;
}BTNode,BiTree;
void CreateBiTree(BiTree &T) {
    scanf(“%c”,&ch);
    if (ch==‘# ’) T = NULL;
    else {
        T = (BiTNode *)malloc(sizeof(BiTNode));
        T->data = ch;              // 生成根结点
      CreateBiTree(T->lchild);   // 构造左子树
      CreateBiTree(T->rchild);   // 构造右子树
         }
    }

这段代码对很多初学者来说一定是耳熟能详的,但是这里面涉及到一个很重要的问题,就是c语言中没有引用,因此'&'的使用编译器不会通过。

于是我们进而会选择不使用&符号,学习过c语言的应该都知道,指针其实就是一个地址,修改指针的内容就相当于修改了指针指向的地址的数据,我们可以将这个函数更改为一个返回值是根节点指针的函数,看看是否可以成功呢?

BiTree CreateBiTree(BiTree T) {
    scanf(“%c”,&ch);
    if (ch==‘# ’) T = NULL;
    else {
        T = (BiTNode *)malloc(sizeof(BiTNode));
        T->data = ch;              // 生成根结点
      CreateBiTree(T->lchild);   // 构造左子树
      CreateBiTree(T->rchild);   // 构造右子树
         }
return T;
}

经过尝试,仍旧还是无法解决这个问题,二叉树仍然无法建立起来。

后来经过查找文献和资料,发现如下的方法可以成功构造二叉树:

void createBiTree(PTree *p)//建立二叉树
{
    char ch;
    scanf("%c", &ch);
    getchar();
    if(ch == '#')
         *p = NULL;
    else
    {
        *p = (PTree)malloc(sizeof(Tree));
        (*p) -> ch = ch;
        createBiTree(&(*p) -> lchild);
        createBiTree(&(*p) -> rchild);
    }

}

通过这种方法就可以完成二叉树的建立。继而去调用其它的遍历函数,即可得到期望的结果。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值