二叉树的先序以及后序递归建立,先中后序递归遍历。
来源:互联网 发布:量化经营 数据分析 编辑:程序博客网 时间:2024/06/07 10:51
先感叹:好久好久没有来CSDN更新了,只是大一的时候在CSDN比较活跃,后来就很少上了,现在都研二了,时间过的好快,以后尽力常来逛逛,然后更新下。
现在研二的第二学期已经开始了,因为学院规定我们研二的要给老师当助教,根据往年的经验,我就是给我们老板当课程《数据结构》的助教,其中最重要的工作就是代替老师给学生带数据结构的实习。想想数据结构已经忘记的也差不多了,想想毕业找工作的时候估计也能用上,就想乘着这个时候把数据结构再捡起来,然后从学习室捣腾了一本程杰的《大话数据结构》来看。下面的代码是我看到二叉树的地方的时候写的一些代码,代码实现平台是Visual Studio 2012,编程语言为C。
// 二叉树建立和遍历.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <stdlib.h>#include <string.h>//下面三个个变量定义是为了在扩展的后序递归创建二叉树中子递归也能访问到输入的后序字符序列char string[100];int len;int flag=1;//该标识符是为了只在第一次调用后序创建二叉树的时候提示输入后序字符序列,而子递归不用。typedef struct BiTNode {char data;struct BiTNode *lchild, *rchild;} BiTNode, *BiTree;//按照先序遍历的顺序进行树的建立结点为空用#表示,如AB#D##C##表示BC分别为根结点A的左右孩子结点,D为B的右孩子void preCreateBiTree(BiTree &T){char ch;scanf("%c",&ch);if(ch=='#')T=NULL;else{T=(BiTree) malloc(sizeof(BiTNode));if(!T)exit(EXIT_FAILURE);T->data=ch;preCreateBiTree(T->lchild);preCreateBiTree(T->rchild);}}//由于中序和后序遍历不能首先建立根结点,用加’#‘的方法是不可能创建一个二叉树的。但是因为后序输入中可以肯定的是最后一个输入的结点肯定是数的根结点,//所以可以根据这一点进行扩展形成后序递归创建二叉树,但是不能像先序一样一边输入一边构建,而是先用一个字符数组将完整的后序序列保存下来,然后从最后//一位开始向前构建,代码如下:void postCreateBiTree(BiTree &T){if(flag==1){scanf("%s",string);//读入完整后序遍历序列,用’#‘代表空结点len=strlen(string);flag=0;}if(string[--len]=='#')T=NULL;else{T=(BiTree)malloc(sizeof(BiTNode));if(!T)exit(EXIT_FAILURE);//因为使从后面向前读取字符,又因为后序是左右中,所以正确顺序是中右左T->data=string[len];postCreateBiTree(T->rchild);postCreateBiTree(T->lchild);}}//先序递归遍历void preOrderTraverse(BiTree T){if(T==NULL)return;printf("%c",T->data);preOrderTraverse(T->lchild);preOrderTraverse(T->rchild);}//中序递归遍历void inOrderTraverse(BiTree T){if(T==NULL)return;inOrderTraverse(T->lchild);printf("%c",T->data);inOrderTraverse(T->rchild);}//后序递归遍历void postOrderTraverse(BiTree T){if(T==NULL)return;postOrderTraverse(T->lchild); postOrderTraverse(T->rchild);printf("%c",T->data);}int _tmain(int argc, _TCHAR* argv[]){BiTree T;printf("%s","请输入先序序列\n");preCreateBiTree(T);printf("%s","新建立的树的先序遍历为:");preOrderTraverse(T);puts("");//简单输出换行printf("%s","新建立的树的中序遍历为:");inOrderTraverse(T);puts("");printf("%s","新建立的树的后序遍历为:");postOrderTraverse(T);puts("");printf("%s","请输入后序序列\n");postCreateBiTree(T);printf("%s","新建立的树的先序遍历为:");preOrderTraverse(T);puts("");printf("%s","新建立的树的中序遍历为:");inOrderTraverse(T);puts("");printf("%s","新建立的树的后序遍历为:");postOrderTraverse(T); puts("");return 0;}
运行结果为:
- 二叉树的先序以及后序递归建立,先中后序递归遍历。
- 二叉树的先序递归以及非递归遍历
- 二叉树的先序遍历、中序遍历以及后序遍历(递归以及非递归方式)
- 建立二叉树,实现二叉树的先序遍历、中序和后序遍历的非递归算法
- C++ 完全二叉树的建立、先序递归非递归遍历、层序遍历
- 先序扩展序列建立二叉树;先序、中序、后序遍历的递归算法(树)
- 二叉树的先序、中序、后序的递归及非递归实现,以及层次遍历的实现:
- 二叉树的先序、中序以及后序遍历(递归与非递归方法)
- 二叉树的先序、中序、后序递归遍历和非递归遍历
- 二叉树的递归创建,先序(中序、后序)递归遍历二叉树
- java版的二叉树的先序遍历、中序遍历以及后序遍历(递归以及非递归方式)
- 实现二叉树的先序遍历、中序遍历、后序遍历的递归非递归算法以及层次遍历算法
- 二叉树非递归先序建立与后序遍历
- java建立二叉树,递归/非递归先序遍历,递归/非递归中序遍历,层次遍历
- 二叉树的创建,先序、中序、后序遍历的递归实现以及层序遍历
- 二叉树的先序、中序、后序遍历的递归和非递归实现
- 二叉树先序建立,先序遍历,中序遍历,后序遍历(递归)
- 二叉树的先序、中序、后序、层序递归及非递归遍历
- UVA 536 - Tree Recovery
- PHP的运行机制
- python shell help
- JS中的EACH使用RETURN
- 《TCP/IP详解》小结系列
- 二叉树的先序以及后序递归建立,先中后序递归遍历。
- 有锁机保基带升级完美越狱工具Sn0wbreeze使用教程
- Dhtml中dhtmlXDataView使用分页问题记录
- java_求素数
- 黑马程序员 SQL从入门到提高
- Ubuntu12下Java开发环境变量(备份)
- lhgcalendar.min.js jQuery日历插件
- Sencha touch ——Ext.get()
- 用eclipse导入uboot工程