关于二叉树及一些问题求解
本来觉得递归二叉树挺简单的,但是实际动手下来发现,有些不理解的错。附上代码。#include "stdio.h"
#include "malloc.h"
typedef struct BiNode
{
char data;
struct BiNode *lchild,*rchild;
}BiNode,*bi_tree;
void create_tree(bi_tree &T)
{
char data;
//printf("请按先序遍历输入结点的值 :\n");
scanf("%c",&data);
if(data==' ')
T=NULL;
else
{
T=(bi_tree)malloc(sizeof(bi_tree));
if(T)
{
T->data=data;
create_tree(T->lchild);
create_tree(T->rchild);
}
}
}
void visit(bi_tree T)
{
printf("%c",T->data);
}
void pre_order(bi_tree T) //前序
NULL)
visit(T);
pre_order(T->lchild); //断点
pre_order(T->rchild);
}
void in_order(bi_tree T) //中序遍历
if(T!=NULL)
in_order(T->lchild);
visit(T);
in_order(T->rchild);
}
void post_order(bi_tree T)
{
if(T!=NULL)
post_order(T->lchild);
post_order(T->rchild);
visit(T);
}
void main()
{
bi_tree T;
create_tree(T);
pre_order(T);
in_order(T);
post_order(T);
}
有以下几个问题不懂。
第一就是,建立二叉树时,输入ABD SD D ,这些空格怎么回事?就是读取时,明明是一个一个字符读取,怎么一下就可以把它按前序遍历输入完?
第二就是,二级指针有些不懂,例如void create_tree(bi_tree &T)、void create_tree(bi_tree T)、void create_tree(bi_tree *T),还有构造结构体时的*bi_tree,怎么会用这个指针定义T?
第三就是,T=(bi_tree)malloc(sizeof(bi_tree)),和T=(bi_tree *)malloc(sizeof(bi_tree));,这个*号,有什么区别么?还有就是这个程序错在哪里了。
问题很多,抱歉。