第十周项目2--二叉树遍历的递归算法
来源:互联网 发布:葛饰北斋 知乎 编辑:程序博客网 时间:2024/05/22 13:00
问题及代码:
/* *Copyright(c) 2015, 烟台大学计算机学院 *All rights reserved. *文件名称:二叉树遍历的递归算法.cpp *作 者:杜文文 *完成日期:2015年 11月 2日 *问题描述:实现二叉树的先序、中序、后序遍历的递归算法, 并对用“A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))”创建的二叉树进行测试。 */
btree.h
#ifndef BTREE_H_INCLUDED#define BTREE_H_INCLUDED#define MaxSize 100typedef char ElemType;typedef struct node{ElemType data;struct node *lchild;struct node *rchild;}BTNode;void CreateBTNode(BTNode *&b,char *str);BTNode *FindNode(BTNode *b,ElemType x);BTNode *LchildNode(BTNode *p);BTNode *RchildNode(BTNode *p);int BTNodeDepth(BTNode *b);void DispBTNode(BTNode *b);void DestroyBTNode(BTNode *&b);#endif // BTREE_H_INCLUDED
btree.cpp
#include <stdio.h>#include <malloc.h>#include "btree.h"void PreOrder(BTNode *b) //先序遍历的递归算法{ if (b!=NULL) { printf("%c ",b->data); //访问根节点 PreOrder(b->lchild); //递归访问左子树 PreOrder(b->rchild); //递归访问右子树 }}void InOrder(BTNode *b) //中序遍历的递归算法{ if (b!=NULL) { InOrder(b->lchild); //递归访问左子树 printf("%c ",b->data); //访问根节点 InOrder(b->rchild); //递归访问右子树 }}void PostOrder(BTNode *b) //后序遍历的递归算法{ if (b!=NULL) { PostOrder(b->lchild); //递归访问左子树 PostOrder(b->rchild); //递归访问右子树 printf("%c ",b->data); //访问根节点 }}void CreateBTNode(BTNode *&b,char *str) //由str串创建二叉链{ BTNode *St[MaxSize],*p=NULL; int top=-1,k,j=0; char ch; b=NULL; //建立的二叉树初始时为空 ch=str[j]; while (ch!='\0') //str未扫描完时循环 { switch(ch) { case '(': top++; St[top]=p; k=1; break; //为左节点 case ')': top--; break; case ',': k=2; break; //为右节点 default: p=(BTNode *)malloc(sizeof(BTNode)); p->data=ch; p->lchild=p->rchild=NULL; if (b==NULL) //p指向二叉树的根节点 b=p; else //已建立二叉树根节点 { switch(k) { case 1: St[top]->lchild=p; break; case 2: St[top]->rchild=p; break; } } } j++; ch=str[j]; }}void DispBTNode(BTNode *b) //以括号表示法输出二叉树{ if (b!=NULL) { printf("%c",b->data); if (b->lchild!=NULL || b->rchild!=NULL) { printf("("); DispBTNode(b->lchild); if (b->rchild!=NULL) printf(","); DispBTNode(b->rchild); printf(")"); } }}void DestroyBTNode(BTNode *&b) //销毁二叉树{ if (b!=NULL) { DestroyBTNode(b->lchild); DestroyBTNode(b->rchild); free(b); }}int main(){ BTNode *b; CreateBTNode(b,"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))"); printf("二叉树b:"); DispBTNode(b); printf("\n"); printf("先序遍历序列:\n"); PreOrder(b); printf("\n"); printf("中序遍历序列:\n"); InOrder(b); printf("\n"); printf("后序遍历序列:\n"); PostOrder(b); printf("\n"); DestroyBTNode(b); return 0;}
运行结果:
知识点总结:二叉树遍历的递归算法。
学习心得:原来程序或许真的没有那么难~~
0 0
- 第十周 项目2 二叉树的遍历递归算法
- 第十周-项目2 - 二叉树遍历的递归算法
- 第十周项目2-二叉树遍历的递归算法
- 第十周-项目2 - 二叉树遍历的递归算法
- 第十周 项目2-二叉树遍历的递归算法
- 第十周项目2--二叉树遍历的递归算法
- 第十周项目2【二叉树遍历的递归算法】
- 第十周 项目2 二叉树遍历的递归算法
- 第十周 项目2-二叉树遍历的递归算法
- 第十周项目2-二叉树遍历的递归算法
- 第十周项目2-二叉树遍历的递归算法
- 第十周项目2--二叉树遍历的递归算法
- 第十周项目2 - 二叉树遍历的递归算法
- 第十周 项目2--二叉树遍历的递归算法
- 第十周项目2二叉树遍历的递归算法
- 第十周 项目2-二叉树遍历的递归算法
- 第十周项目2-二叉树遍历的递归算法
- 第十周项目2- 二叉树遍历的递归算法
- Properties的load方法加载的文件格式要求
- C语言类型转换详解
- 第9周 项目2 - 压缩存储的对称矩阵的运算(2)
- 第十周-二叉树遍历的基本算法
- 第九周项目二:对称矩阵的压缩存储和基本运算
- 第十周项目2--二叉树遍历的递归算法
- Android大图片裁剪终极解决方案 原理分析
- ogg报错 No viable tables matched specification.
- Android各个版本版本号对应关系表及悬浮框
- java并发编程 之 常用并发类库使用举例
- 前端不为人知的一面--前端冷知识集锦
- VIM Resources
- 一步一步在ubuntu上安装即时通讯服务器-Openfire
- listview中header和footer以及对postion等的处理