| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2881 人关注过本帖
标题:[原创]用C语言写的求二叉树的建立,前中后遍历,深度以及结点个数的程序
只看楼主 加入收藏
yingwu9420
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2005-4-15
收藏
 问题点数:0 回复次数:9 
[原创]用C语言写的求二叉树的建立,前中后遍历,深度以及结点个数的程序

#include <stdio.h> #include<malloc.h> #define MaxSize 100 typedef char ElemType; typedef struct node { ElemType data; struct node *left,*right; } BTree;

void creatree(BTree **BT,char *str) { BTree *stack[MaxSize],*p; int top=-1,k,j=0;/*top为栈指针,k指定是左还是右孩子,j为str指针*/ char ch; *BT=NULL; ch=str[j]; while (ch!='\0') { switch(ch) { case '(':top++;stack[top]=p;k=1; /*为左结点*/ break; case ')':top--; break; case ',':k=2; /*为右结点*/ break; default: p=(BTree *)malloc(sizeof(BTree)); p->data=ch;p->left=p->right=NULL; if (*BT==NULL) /*根结点*/ *BT=p; else { switch(k) { case 1:stack[top]->left=p; break; case 2:stack[top]->right=p; } } } j++; ch=str[j]; } } void preorder(BTree *BT) { if (BT!=NULL) { printf("%c",BT->data); preorder(BT->left); preorder(BT->right); } } void inorder(BTree *BT) { if (BT!=NULL) { inorder(BT->left); printf("%c",BT->data); inorder(BT->right); } } void postorder(BTree *B) { if (B!=NULL) { postorder(B->left); postorder(B->right); printf("%c",B->data); } } int BTreeDepth(BTree *B) { int leftdep,rightdep; if (B==NULL) return(0); else { leftdep=BTreeDepth(B->left); rightdep=BTreeDepth(B->right); if (leftdep>rightdep) return(leftdep+1); else return(rightdep+1); } } int leafcount(BTree *B) { if (B==NULL) return(0); else if (B->left==NULL && B->right==NULL) return(1); else return(leafcount(B->left)+leafcount(B->right)); }

main() { BTree *B; char *s="A(B(D,E(H,I)),C(G))"; creatree(&B,s); printf("\n前序遍历:"); preorder(B); printf("\n中序遍历:"); inorder(B); printf("\n后序遍历:"); postorder(B); printf("\nthe deepth is%d\n",BTreeDepth(B)); printf("the leafcount is %d\n",leafcount(B)); } 谢谢曾经给我的提示,以后希望大家一起努力!!!!!

搜索更多相关主题的帖子: 二叉树 遍历 C语言 结点 深度 
2005-04-25 23:13
happyyu
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2005-4-10
收藏
得分:0 
太感谢

我晕死,因为不会
2005-04-26 18:02
luyulin
Rank: 1
等 级:新手上路
帖 子:66
专家分:0
注 册:2004-12-18
收藏
得分:0 
原个。。。。
2005-04-26 22:37
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 
这个不错,遍历用非递归写更好,我用C++写了,放了上去

c++/C + 汇编 = 天下无敌
2005-04-27 14:09
terry
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2005-5-3
收藏
得分:0 
谢谢

编程编程再编程!超越自我,永无止境! terry5583@
2005-05-08 21:48
yila
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2005-5-15
收藏
得分:0 
那要从键盘输入建立二叉树并显示出中序遍历结果要怎么写?

2005-05-15 14:04
yingwu9420
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2005-4-15
收藏
得分:0 
你只要把下面的这个字符数组该为scanf语句就可以了...我还要去写作业.你自己改改看吧.........
 char *s="A(B(D,E(H,I)),C(G))";
2005-05-15 18:14
apodemas
Rank: 1
等 级:新手上路
帖 子:153
专家分:0
注 册:2005-4-22
收藏
得分:0 
.....我们的作业,我和楼主写的一样,但是对于求深度 求叶子数等问题,我觉得用的return过多了,有没有能简化点的看着舒服点?一个程序只有一个return的

2005-05-29 15:38
生姜
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2005-4-5
收藏
得分:0 
简单简单



2005-06-01 20:38
zhantianran
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-5-30
收藏
得分:0 
2006-09-28 09:34
快速回复:[原创]用C语言写的求二叉树的建立,前中后遍历,深度以及结点个数的程序
数据加载中...
 
   



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

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