| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3056 人关注过本帖
标题:求助!二叉树的创建方法!
只看楼主 加入收藏
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
 问题点数:0 回复次数:9 
求助!二叉树的创建方法!

二叉树的标准创建方法是什么样的,怎么书上都没有啊,难道非要向下面这样的吗?
那位大哥知道标准的创建方法,告诉告诉

static void CreateTree(Tree *T)
{
int c;

c = getchar();

if (c == '/')
{
*T = NULL;
}
else
{
if (((*T) = (Tree)malloc(sizeof(Tnode))) == NULL)
{
exit(1);
}
(*T) -> data = c;
(*T) -> lchild = (*T) -> rchild = NULL;

CreateTree(&(*T) -> lchild);
CreateTree(&(*T) -> rchild);
}
}

搜索更多相关主题的帖子: 二叉树 
2006-05-20 22:12
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 
汗...你能建出来.你还问..

哪有什么标准创建方法啊..能建出来就行呗~

[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-05-20 22:14
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 
我倒,总有一个向链表形式的标准框架吧,书上连这都没有,兄弟,你知不知道啊,告诉告诉我,这种创建也太费事了

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-20 22:17
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 
这还费事吗?
链表的标准创建我都不知道是哪个..
这倒是得请教下你..
链表的标准创建到底是哪个...我真的不知道!

[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-05-20 22:25
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 

不就是那后插法吗,还有其它的吗


日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-20 22:28
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 
晕..不好意思.我还是没弄明白..还有别的方法吗?除了后插法..

那二叉树不也就那一个创建方法嘛..

我以为你说的是算法

[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-05-20 22:30
evil_evil
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-3-4
收藏
得分:0 

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define maxsize 26
typedef char datatype; //结点属性值类型

typedef struct bitreenode //二叉树结点类型
{
datatype info;
struct bitreenode *leftchild,*rightchild;
}bitreenode;

typedef struct stack //栈的定义
{
bitreenode *data[maxsize];
int tag[maxsize];
int top;
}seqstack;

void initstack(seqstack *t) //栈的初始化
{
t->top=-1;
}

int emptystack(seqstack *t) //判断栈是否为空
{
return(t->top==-1?1:0);
}

void pushstack(seqstack *t,bitreenode *e) //入栈
{
t->data[++t->top]=e;
}

bitreenode *popstack(seqstack *t) //出栈
{
return(t->data[t->top--]);
}

bitreenode *getstack_top(seqstack *t) //取栈顶元素
{
return(t->data[t->top]);
}

bitreenode *creatbitree() //按深度输入完全二叉树来建立二叉树
{ //从上到下,从左到右,输入完全二叉树
int i;
struct
{
datatype x;
bitreenode *p;
}y[maxsize+1];
char c[maxsize];
gets(c);
for(i=0;i<strlen(c);i++)
{
y[i+1].x=c[i];
if(y[i+1].x!='$')
{
y[i+1].p=(bitreenode *)malloc(sizeof(bitreenode));
y[i+1].p->info=c[i];
y[i+1].p->leftchild=y[i+1].p->rightchild=NULL;
}
else
y[i+1].p=NULL;
}
for(i=1;i<=strlen(c)/2;i++)
{
y[i].p->leftchild=y[2*i].p;
if((2*i+1)>strlen(c))
break;
y[i].p->rightchild=y[2*i+1].p;
}
return(y[1].p);
}

void preorder_by_digui(bitreenode *t) //前序遍历(递归)
{
if(t)
{
printf("%c",t->info);
preorder_by_digui(t->leftchild);
preorder_by_digui(t->rightchild);
}
}

void inorder_by_digui(bitreenode *t) //中序遍历(递归)
{
if(t)
{
inorder_by_digui(t->leftchild);
printf("%c",t->info);
inorder_by_digui(t->rightchild);
}
}

void postorder_by_digui(bitreenode *t) //后序遍历(递归)
{
if(t)
{
postorder_by_digui(t->leftchild);
postorder_by_digui(t->rightchild);
printf("%c",t->info);
}
}

void preorder(bitreenode *bitree_root) //前序遍历(非递归)
{
seqstack *temp;
temp=(seqstack *)malloc(sizeof(seqstack));
initstack(temp);
while((bitree_root!=NULL)||!(emptystack(temp)))
{
while(bitree_root!=NULL)
{
printf("%c",bitree_root->info);
pushstack(temp,bitree_root);
bitree_root=bitree_root->leftchild;
}
if(!emptystack(temp))
{
bitree_root=popstack(temp);
bitree_root=bitree_root->rightchild;
}
}
}

void inorder(bitreenode *bitree_root) //中序遍历(非递归)
{
seqstack *temp;
temp=(seqstack *)malloc(sizeof(seqstack));
initstack(temp);
while((bitree_root!=NULL)||!(emptystack(temp)))
{
while(bitree_root!=NULL)
{
pushstack(temp,bitree_root);
bitree_root=bitree_root->leftchild;
}
if(!emptystack(temp))
{
bitree_root=popstack(temp);
printf("%c",bitree_root->info);
bitree_root=bitree_root->rightchild;
}
}
}

void postorder(bitreenode *bitree_root) //后序遍历(非递归)
{
seqstack *temp;
temp=(seqstack *)malloc(sizeof(seqstack));
initstack(temp);
while((bitree_root!=NULL)||!(emptystack(temp)))
{
while(bitree_root!=NULL)
{
pushstack(temp,bitree_root);
temp->tag[temp->top]=0;
bitree_root=bitree_root->leftchild;
}
while(!emptystack(temp)&&temp->tag[temp->top]==1)
{ bitree_root=getstack_top(temp);
printf("%c",bitree_root->info);
temp->top--;
}
if(!emptystack(temp))
{
bitree_root=getstack_top(temp);
temp->tag[temp->top]=1;
bitree_root=bitree_root->rightchild;
}
else
bitree_root=NULL;
}
}

int depth(bitreenode *bitree_root) //求二叉树的深度
{
int h,lh,rh;
if(bitree_root==NULL)
h=0;
else
{
lh=depth(bitree_root->leftchild);
rh=depth(bitree_root->rightchild);
(lh>=rh)?(h=lh+1):(h=rh+1);
}
return(h);
}

main()
{
bitreenode *root; //指向二叉树根结点的指针
root=creatbitree();
printf("二叉树的深度为 %d\n",depth(root));
printf("前序遍历\n");
preorder(root);
printf("\n");
preorder_by_digui(root);
printf("\n中序遍历\n");
inorder(root);
printf("\n");
inorder_by_digui(root);
printf("\n后序遍历\n");
postorder(root);
printf("\n");
postorder_by_digui(root);
printf("\n");
getch();

}


潜水员!
2006-05-21 12:06
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-21 12:13
evil_evil
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-3-4
收藏
得分:0 
for example : ABCD$E

潜水员!
2006-05-21 12:15
美丽心情
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2006-3-27
收藏
得分:0 

// 按先序次序建立一个二叉树

Status BinTreeCreat(BiTree &BT)

{

char ch; scanf("%c",&ch);

if(ch=='#') BT=NULL; //"#"表示没有这个结点

else{

BT=(BitNode *)malloc(sizeof(BitNode));

if(!BT) return ERROR;

BT->data=ch;

BinTreeCreat(BT->lchild);

BinTreeCreat(BT->rchild);

}

return OK;

}//BinTreeCreat


做一名C程序员怎么样?
2006-05-21 12:29
快速回复:求助!二叉树的创建方法!
数据加载中...
 
   



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

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