| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 601 人关注过本帖
标题:[讨论]二叉树操做
取消只看楼主 加入收藏
柒兲
Rank: 1
等 级:新手上路
威 望:1
帖 子:126
专家分:0
注 册:2007-9-26
收藏
 问题点数:0 回复次数:1 
[讨论]二叉树操做

#include <stdio.h>
#include <malloc.h>

typedef struct btnode
{
char ch;
struct btnode *lchild,*rchild;
}BTnode;

BTnode *Create()
{
BTnode *root,*p,*a[100];
int num;
char str;
int j=0;
printf("\n");
printf("请输入你要创建树结点的编号和值(请以0和#结束)\n");
printf("i,string\n");
scanf("%d,%c",&num,&str);
getchar();
while(num!=0 && str !='#')
{
p=(BTnode *)malloc(sizeof(BTnode));
p->ch=str;
p->lchild=p->rchild=NULL;
a[num]=p;
if(num==1)
root=p;
else
{
j=num/2;
if(num%2==0)
a[j]->lchild=p;
else
a[j]->rchild=p;
}
scanf("%d,%c",&num,&str);
getchar();
}
return root;
}

void Preorder(BTnode *p)//先根遍历
{
if(p)
{
printf("->%c",p->ch);
Preorder(p->lchild);
Preorder(p->rchild);
}
}
void Inorder(BTnode *p)//中根遍历
{
if(p)
{
Inorder(p->lchild);
printf("->%c",p->ch);
Inorder(p->rchild);
}
}
void Posorder(BTnode *p)//先根遍历
{
if(p)
{
Posorder(p->lchild);
Posorder(p->rchild);
printf("->%c",p->ch);
}
}

void main()
{
BTnode *head;
head=Create();
printf("先根遍历,结果为 :");
Preorder(head);
printf("\n");
printf("中根遍历,结果为 :");
Inorder(head);
printf("\n");
printf("后根遍历,结果为 :");
Posorder(head);
printf("\n");
}

创建二叉树` 和遍历二叉树`

但是输入创建的时候`` 只能依次输入 编号的值`` 那位师兄有方法`可以随机输入每个结点的内容?

搜索更多相关主题的帖子: 二叉树 
2007-11-07 13:09
柒兲
Rank: 1
等 级:新手上路
威 望:1
帖 子:126
专家分:0
注 册:2007-9-26
收藏
得分:0 
回复:(nearforest)创建二叉树` 和遍历二叉树` 但...
谢谢你了哦``
因为我这个程序`只能输入 1,A
2,B
3,C
5,D 这样的` 还不能乱了顺序!如果乱了`就创建不了
数字是每个结点的编号,我是通过编号来实现判断的`
如果 1 就是根结点``
然后才判断 那个就他的右孩子和左孩子,最后进行连接``

我想要解决的就是` 不这样输入,比如` 想输入那个字符就输那个字符``最后建立二叉树!


谢谢你给我的提醒` 我在试下`!

2007-11-08 17:57
快速回复:[讨论]二叉树操做
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031270 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved