| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5036 人关注过本帖
标题:求建立二叉树的程序。
只看楼主 加入收藏
aaaC
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2005-1-14
收藏
 问题点数:0 回复次数:4 
求建立二叉树的程序。
求建立二叉树的程序。谁有给一份。谢谢!
搜索更多相关主题的帖子: 二叉树 
2005-01-24 11:33
zz8255
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2005-1-19
收藏
得分:0 

用c语言写的! struct tree { struct tree *left; int data; struct tree *right; }; typedef struct tree treenode; typedef treenode *btree;

btree insert_node(btree root,int node) { btree newnode; btree currentnode; btree parentnode;

newnode=(btree)malloc(sizeof(treenode));

newnode->data=node; newnode->left=NULL; newnode->right=NULL;

if(root==NULL) return newnode; else { currentnode=root; while(currentnode!=NULL) { parentnode=currentnode; if(currentnode->data > node) currentnode=currentnode->left; else currentnode=currentnode->right; } if(parentnode->data > node) parentnode->left=newnode; else parentnode->right=newnode; } return root; }

btree create_btree(int *data,int len) { btree root=NULL; int i;

for(i=0;i<len;i++) root=insert_node(root,data[i]); return root; }


2005-01-25 17:21
Antigloss
Rank: 1
等 级:新手上路
帖 子:109
专家分:0
注 册:2004-12-30
收藏
得分:0 

二叉树

definition.h ========================================= #define INIT_SIZE 100 //存储空间初始分配量 #define INCREMENT 10 //存储空间分配增量

typedef char TElemType;

typedef struct{ TElemType data; struct BiTNode *lchild, *rchild;//左右孩子指针 }BiTNode, *BiTree;//二叉树的二叉链表存储表示

typedef struct{ BiTree *top, *base; //栈顶指针和栈底指针 unsigned stacksize; //当前已分配的存储空间,以元素为单位 }SqStack;

BiTree CreateBiTree(void);//按先序次序输入二叉树中结点的值,'#'代表空树 void PreOrderTraverse(BiTree);//先序遍历二叉树 int InOrderTraverse(BiTree);//中序遍历二叉树,非递归 int InOrderTraverse2(BiTree); int InitStack(SqStack *);//创建一个空栈 int Push(SqStack *, BiTree); //插入栈顶 ===========================================================================

main.c ================================================ #include <stdio.h> #include "definition.h"

int main() { BiTree bt;

printf("请输入根结点:"); bt = CreateBiTree();//按先序次序创建二叉树 PreOrderTraverse(bt); //先序遍历二叉树 printf("\n"); if( InOrderTraverse(bt) )//中序遍历二叉树,非递归 return 1;//遍历失败,返回 printf("\n"); if( InOrderTraverse2(bt) )//中序遍历二叉树,非递归 return 1;//遍历失败,返回 printf("\n");

return 0; } ===================================================================

function.c ====================================================== #include <stdio.h> #include <malloc.h> #include "definition.h"

BiTree CreateBiTree(void)//按先序次序输入二叉树中结点的值,'#'代表空树 { TElemType e; BiTree tmp = NULL;

if( (e=getchar())!='#' ){ getchar();//接收回车符 tmp=(BiTree)malloc(sizeof(BiTNode)); if(!tmp) return NULL; tmp->data=e; printf("请输入左孩子:"); tmp->lchild=CreateBiTree(); printf("请输入右孩子:"); tmp->rchild=CreateBiTree(); } else getchar();//接收回车符

return tmp; }

void PreOrderTraverse(BiTree bt)//先序遍历二叉树 { if(bt){ printf("%c", bt->data); PreOrderTraverse(bt->lchild); //printf("%c", bt->data);不要上面的printf,而用这个printf,则为中序遍历 PreOrderTraverse(bt->rchild); //printf("%c", bt->data);不要上面的printf,而用这个printf,则为后序遍历 } }

int InOrderTraverse(BiTree bt)//中序遍历二叉树,非递归 { SqStack S; BiTree tmp;

if( InitStack(&S) ) return 1;//如果创建空栈失败,返回1 if( Push(&S, bt) )//根指针进栈 return 1;//如果压栈失败,返回1 while(S.base!=S.top){ while( tmp=*(S.top-1) ){ if( Push(&S, tmp->lchild) )//向左走到尽头 return 1; //printf("%c", tmp->data);//printf放于此处即为先序遍历 } --S.top;//空指针退栈 //访问结点,向右一步 if(S.base!=S.top){ tmp = *(--S.top); printf("%c", tmp->data); if( Push(&S, tmp->rchild) ) return 1; } }

free(S.base); return 0; }

int InOrderTraverse2(BiTree bt) { SqStack S; BiTree tmp = bt;

if( InitStack(&S) ) return 1;//如果创建空栈失败,返回1 while( tmp||(S.base!=S.top) ){ if(tmp){ if( Push(&S, tmp) )//根指针进栈,遍历左子树 return 1; //printf("%c", tmp->data);//printf放于此处即为先序遍历 tmp = tmp->lchild; } //根指针退栈,访问根结点,遍历右子树 else{ tmp = *(--S.top); printf("%c", tmp->data); tmp = tmp->rchild; } }

free(S.base); return 0; }

int InitStack(SqStack *S) //创建一个空栈 { S->base=(BiTree *)malloc( INIT_SIZE * sizeof(BiTree) ); if(!S->base) //空间分配失败 return 1; //空间分配成功 S->top=S->base;//置栈顶指针 S->stacksize=INIT_SIZE;//栈大小 return 0; }

int Push(SqStack *S, BiTree T) //插入栈顶 { if( (unsigned)(S->top - S->base) >= S->stacksize){//栈满,追加存储空间 S->base=(BiTree *)realloc(S->base, (S->stacksize+INCREMENT)*sizeof(BiTree) ); if(!S->base)//分配失败,返回1 return 1; //分配成功 S->top = S->base + S->stacksize;//置栈顶指针 S->stacksize += INCREMENT;//栈大小 } *S->top++ = T;//接收输入后,S->top指向栈顶元素的下一个位置

return 0; }

2005-02-08 12:06
jianhuaf
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-6-1
收藏
得分:0 

怎么没有主函数 啊

2006-06-01 18:19
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-06-01 18:27
快速回复:求建立二叉树的程序。
数据加载中...
 
   



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

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