递归创建二叉树是怎么执行的
voidCreatBiTree(BiTree&T)charch;ch=getchar()T->data=ch;CreatBiTree(T->lchild);CreatBi...
void CreatBiTree(BiTree &T)
char ch;
ch=getchar()
T->data=ch;
CreatBiTree(T->lchild);
CreatBiTree(T->rchild); 展开
char ch;
ch=getchar()
T->data=ch;
CreatBiTree(T->lchild);
CreatBiTree(T->rchild); 展开
3个回答
展开全部
/*
这有个例子 你先看看吧
*/
# include <stdio.h>
# include <stdlib.h>
//节点结构体
typedef struct BiTNode
{
char data;
struct BiTNode * lchild,* rchild;
}BiTNode, *BiTree;
//按先序次序输入二叉树中结点的值(字符型)
//构造二叉链表表示的二叉树T,0表示空(子)树
void CreateBiTree(BiTree * T)
{
char ch;
fflush(stdin);
ch = getchar();
if (ch == '0')//空
{
* T = NULL;
}
else
{
* T = (BiTree)malloc(sizeof(BiTNode));//生成根结点
if (! T)
{
exit(-1);
}
(* T)->data = ch;
printf("%c的左孩子节点:\n", ch);
CreateBiTree(&(* T)->lchild);//构造左子树
printf("%c的右孩子节点:\n", ch);
CreateBiTree(&(* T)->rchild);//构造右子树
}
}
void PreTravel(BiTree T)
{
if(T)
{
printf("%c ",T->data);
PreTravel(T->lchild);
PreTravel(T->rchild);
}
}
//操作结果:构造空的二叉树T
void InitBiTree(BiTree * T)
{
* T = NULL;
}
int main()
{
BiTree T;
InitBiTree(&T);
printf("请输入一个char类型结点:\n");
CreateBiTree(&T);
printf("先序遍历二叉树\n");
PreTravel(T);
printf("\n");
return 0;
}
/*
--------
请输入一个char类型结点:
a
a的左孩子节点:
b
b的左孩子节点:
0
b的右孩子节点:
0
a的右孩子节点:
c
c的左孩子节点:
0
c的右孩子节点:
0
先序遍历二叉树
a b c
Press any key to continue
---------
*/
这有个例子 你先看看吧
*/
# include <stdio.h>
# include <stdlib.h>
//节点结构体
typedef struct BiTNode
{
char data;
struct BiTNode * lchild,* rchild;
}BiTNode, *BiTree;
//按先序次序输入二叉树中结点的值(字符型)
//构造二叉链表表示的二叉树T,0表示空(子)树
void CreateBiTree(BiTree * T)
{
char ch;
fflush(stdin);
ch = getchar();
if (ch == '0')//空
{
* T = NULL;
}
else
{
* T = (BiTree)malloc(sizeof(BiTNode));//生成根结点
if (! T)
{
exit(-1);
}
(* T)->data = ch;
printf("%c的左孩子节点:\n", ch);
CreateBiTree(&(* T)->lchild);//构造左子树
printf("%c的右孩子节点:\n", ch);
CreateBiTree(&(* T)->rchild);//构造右子树
}
}
void PreTravel(BiTree T)
{
if(T)
{
printf("%c ",T->data);
PreTravel(T->lchild);
PreTravel(T->rchild);
}
}
//操作结果:构造空的二叉树T
void InitBiTree(BiTree * T)
{
* T = NULL;
}
int main()
{
BiTree T;
InitBiTree(&T);
printf("请输入一个char类型结点:\n");
CreateBiTree(&T);
printf("先序遍历二叉树\n");
PreTravel(T);
printf("\n");
return 0;
}
/*
--------
请输入一个char类型结点:
a
a的左孩子节点:
b
b的左孩子节点:
0
b的右孩子节点:
0
a的右孩子节点:
c
c的左孩子节点:
0
c的右孩子节点:
0
先序遍历二叉树
a b c
Press any key to continue
---------
*/
展开全部
你这个递归有问题,没有终结。
应该加一个判断条件,否则就会一直递归调用下去。
应为:
void CreatBiTree(BiTree &T)
{
char ch;
ch=getchar()
T=0;
T->lchinld = 0;
T->rchinld = 0;
if(ch==0)
return ;
T = new (BTree);
T->data=ch;
CreatBiTree(T->lchild);
CreatBiTree(T->rchild);
}
应该加一个判断条件,否则就会一直递归调用下去。
应为:
void CreatBiTree(BiTree &T)
{
char ch;
ch=getchar()
T=0;
T->lchinld = 0;
T->rchinld = 0;
if(ch==0)
return ;
T = new (BTree);
T->data=ch;
CreatBiTree(T->lchild);
CreatBiTree(T->rchild);
}
参考资料: http://hi.baidu.com/new/zhjiemm
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
主要有两个方面:
1 递归的初始条件
2 递归的函数
你可以从初始条件开始递归两三次就会明白了。
其实递归用的多了就知道怎么回事了,熟能生巧。
1 递归的初始条件
2 递归的函数
你可以从初始条件开始递归两三次就会明白了。
其实递归用的多了就知道怎么回事了,熟能生巧。
更多追问追答
追问
就是看不懂怎么递归创建的
追答
首先要明白void CreatBiTree( BiTree&T)中BiTree是什么样的数据结构,应该是 一个结构体
struct BiTree{
struct BiTree *lchild, *rchild;
char data;
};
在根据你要建立的二叉树,比如按照字符的大小顺序(在iisac码中的排列)来建立二叉树。
本来想举个例子,可是你的代码太少了,不知道能不能给个完整的,上面的代码看不出来递归的初始条件啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询