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



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

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