SmithDimon 发表于 2020-3-22 15:14:59

关于二叉树问题

本帖最后由 SmithDimon 于 2020-3-22 15:39 编辑

照着小甲鱼视频代码打的 可是运行结果并没有输出数据和其所在层数求助大佬指点指点

#include<stdio.h>
#include<stdlib.h>

typedef struct Bitnode{       //定义了一个二叉树的节点
        char date;
        struct Bitnode *lchild,*rchild;
}Bitreenode;

void creatBitree(Bitreenode* p)//创建二叉树
{
        char c;
        scanf("%c",&c);
        if(c == ' ')
        {
                p = NULL;
        }
        else
        {
                p=(Bitreenode*)malloc(sizeof(Bitreenode));
                p->date = c;
                creatBitree(p->lchild);
                creatBitree(p->rchild);
        }
}
void visit(char c,int level)   //输出此元素在整个树的第几层
{
        printf("数据%c在第%d层\n",c,level);
}

void PreorderTraveserse(Bitreenode *p,int level)   //前序遍历二叉树
{
        if(p)
        {
                visit(p->date,level);
                PreorderTraveserse(p->lchild,level+1);
                PreorderTraveserse(p->rchild,level+1);
        }
}

int main()
{
        Bitreenode p;
        int level=1;
        creatBitree(&p);
        PreorderTraveserse(&p,level);
       
        return 0;
}

人造人 发表于 2020-3-22 15:41:25

要修改一级指针的指向,需要二级指针

人造人 发表于 2020-3-22 15:42:19

我刚说完你就改了,^_^
我再看看哈

人造人 发表于 2020-3-22 15:44:41

还是一样


要修改一级指针的指向,需要二级指针

人造人 发表于 2020-3-22 15:52:56

#include<stdio.h>
#include<stdlib.h>

typedef struct Bitnode{       //定义了一个二叉树的节点
      char data;
      struct Bitnode *lchild,*rchild;
}Bitreenode;

void creatBitree(Bitreenode **p)//创建二叉树
{
      char c;
      scanf("%c", &c);
      if(c == ' ')
      {
                *p = NULL;
      }
      else
      {
                *p = malloc(sizeof(Bitreenode));
                (*p)->data = c;
                creatBitree(&(*p)->lchild);
                creatBitree(&(*p)->rchild);
      }
}
void visit(char c, int level)   //输出此元素在整个树的第几层
{
      printf("数据%c在第%d层\n", c, level);
}
void PreorderTraveserse(Bitreenode *p, int level)   //前序遍历二叉树
{
      if(p)
      {
                visit(p->data, level);
                PreorderTraveserse(p->lchild, level + 1);
                PreorderTraveserse(p->rchild, level + 1);
      }
}
int main(void)
{
      Bitreenode *p;
      creatBitree(&p);
      PreorderTraveserse(p, 1);
      return 0;
}

zhaopengfei 发表于 2020-3-22 17:13:44

楼上正解,创建二叉树时,参数为指针的指针才行。

SmithDimon 发表于 2020-3-24 13:21:13

人造人 发表于 2020-3-22 15:52


感谢大佬耐心回答 {:5_95:}

SmithDimon 发表于 2020-3-24 13:23:52

人造人 发表于 2020-3-22 15:44
还是一样




可以讲解下为什么需要二级指针呢为啥一级指针会有问题呢?

人造人 发表于 2020-3-24 15:31:03

SmithDimon 发表于 2020-3-24 13:23
可以讲解下为什么需要二级指针呢为啥一级指针会有问题呢?

要修改一级指针的指向,需要二级指针
这和要修改普通变量要用一级指针   是一样的

ShallweGo 发表于 2020-6-5 15:35:59

为啥我的递归出不去,我发现在创建右孩子的时候必须再创建一个左孩子,而不能直接结束该层递归
页: [1]
查看完整版本: 关于二叉树问题