二叉树的输出
2015-07-27 21:48
423 查看
例如:按树输出如下:
运行结果如下:
#include <stdio.h> #include <stdlib.h> #include <malloc.h> #define MAXSIZE 100 typedef char ElemType; typedef struct Node { ElemType data; struct Node *lchild; struct Node *rchild; }*BitTree,BitNode; void CreateBitTree2(BitTree *T,char str[]);//非递归创建二叉树 void LevelPrint(BitTree T);//按层次打印二叉树的结点 void TreePrint(BitTree T,int level);//按树状形式打印二叉树 void DestroyBitTree(BitTree *T);//销毁二叉树 #include "LinkBiTree.h" void CreateBitTree2(BitTree *T,char str[])//非递归创建二叉树 { char ch; BitTree stack[MAXSIZE]; int top = -1; int flag,k; BitNode *p; *T = NULL,k = 0; ch = str[k]; while(ch != '\0') { switch(ch) { case '(': stack[++top] = p; flag = 1; break; case ')': top--; break; case ',': flag = 2; break; default: p = (BitTree)malloc(sizeof(BitNode)); p->data = ch; p->lchild = NULL; p->rchild = NULL; if(*T == NULL) { *T = p; } else { switch(flag) { case 1: stack[top]->lchild = p; break; case 2: stack[top]->rchild = p; break; } } } ch = str[++k]; } } void LevelPrint(BitTree T)//按层次打印二叉树的结点 { BitTree queue[MAXSIZE]; BitNode *p; int front,rear; front = rear = -1; rear++; queue[rear] = T; while(front != rear) { front = (front+1)%MAXSIZE; p = queue[front]; printf("%c ",p->data); if(p->lchild != NULL) { rear = (rear+1)%MAXSIZE; queue[rear] = p->lchild ; } if(p->rchild != NULL) { rear = (rear+1)%MAXSIZE; queue[rear] = p->rchild ; } } } void TreePrint(BitTree T,int level)//按树状形式打印二叉树 { int i; if(T == NULL) { return; } TreePrint(T->rchild ,level+1); for(i = 0;i < level;i++) { printf(" "); } printf("%c\n",T->data); TreePrint(T->lchild ,level+1); } void DestroyBitTree(BitTree *T)//销毁二叉树 { if(*T) { if((*T)->lchild) { DestroyBitTree(&((*T)->lchild)); } if((*T)->rchild) { DestroyBitTree(&((*T)->rchild)); } free(*T); *T = NULL; } } #include "LinkBiTree.h" int main(void) { BitTree T,root; printf("利用括号嵌套建立二叉树:\n"); CreateBitTree2(&T,"(a(b(c,d),e(f(,g),h(i))))"); printf("按层次输出二叉树序列:\n"); LevelPrint(T); printf("\n"); printf("按树状打印二叉树:\n"); TreePrint(T,1); printf("\n"); printf("利用括号嵌套建立二叉树:\n"); CreateBitTree2(&root,"(A(B(D(,H),E(,I)),C(F,G)))"); printf("按层次输出二叉树序列:\n"); LevelPrint(root); printf("\n"); printf("按树状打印二叉树:\n"); TreePrint(root,1); printf("\n"); DestroyBitTree(&T); DestroyBitTree(&root); return 0; }
运行结果如下:
相关文章推荐
- hdu4737A Bit Fun 线段树
- Redis使用介绍
- 正确lua简单的扩展,可以加速相关C++数据。
- JS函数式编程【译】2.1 函数式编程语言
- 【数论,找规律】Uva 11526 - H(n)
- [数据结构] 字典树
- regmap模块
- hdu 5296 - Annoying problem(2015 Multi-University Training Contest 1 )LCA
- 学数据机构干什么?
- hdu2524 (求矩形个数,水题。。。)
- django 1.8 官方文档翻译: 3-6-1 中间件概览
- PAT (Advanced Level) 1059. Prime Factors (25) 求所有质因子
- 进程和线程的差别
- hdu 4411 Arrest (最小费用最大流)
- 数据结构---单链表(2)
- linux c++循环缓冲区模板类
- zoj3202 Second-price Auction
- IOS中NSUserDefaults的用法(轻量级本地数据存储) (转)
- 搭建基于LAMP的web应用程序平台
- JS常用正则表达式