关于二叉树问题
本帖最后由 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;
}
要修改一级指针的指向,需要二级指针
我刚说完你就改了,^_^
我再看看哈 还是一样
要修改一级指针的指向,需要二级指针 #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;
}
楼上正解,创建二叉树时,参数为指针的指针才行。 人造人 发表于 2020-3-22 15:52
感谢大佬耐心回答 {:5_95:} 人造人 发表于 2020-3-22 15:44
还是一样
可以讲解下为什么需要二级指针呢为啥一级指针会有问题呢? SmithDimon 发表于 2020-3-24 13:23
可以讲解下为什么需要二级指针呢为啥一级指针会有问题呢?
要修改一级指针的指向,需要二级指针
这和要修改普通变量要用一级指针 是一样的
为啥我的递归出不去,我发现在创建右孩子的时候必须再创建一个左孩子,而不能直接结束该层递归
页:
[1]