树遍历相关算法
来源:互联网 发布:阿里云带宽怎么升级 编辑:程序博客网 时间:2024/04/28 08:50
树可以通过前序+中序求后序,或者后序+中序求前序。我们无法通过前序和后序求中序,因为后序加前序无法唯一确定一颗二叉树。
例如:
前序:ab
后序:ba
这样你就无法判断b是a的左子树还是右子树。
通过前序和中序求后序,程序如下:
#include <stdio.h>#include <string.h>int find(char c,char A[],int s,int e) /**//* 找出中序中根的位置。 */{int i;for(i=s;i<=e;i++)if(A[i]==c) return i;}/**//* 其中pre[]表示先序序,pre_s为先序的起始位置,pre_e为先序的终止位置。 *//**//* 其中in[]表示中序,in_s为中序的起始位置,in_e为中序的终止位置。 *//**//* pronum()求出pre[pre_s~pre_e]、in[in_s~in_e]构成的后序序列。 */void pronum(char pre[],int pre_s,int pre_e,char in[],int in_s,int in_e){char c;int k;if(in_s>in_e) return ; /**//* 非法子树(子树为空),完成。 */if(in_s==in_e){printf("%c",in[in_s]); /**//* 子树子仅为一个节点时直接输出并完成。 */return ;}c=pre[pre_s]; /**//* c储存根节点。 */k=find(c,in,in_s,in_e); /**//* 在中序中找出根节点的位置。 */pronum(pre,pre_s+1,pre_s+k-in_s,in,in_s,k-1); /**//* 递归求解分割的左子树。 */pronum(pre,pre_s+k-in_s+1,pre_e,in,k+1,in_e); /**//* 递归求解分割的右子树。 */printf("%c",c); /**//* 根节点输出。 */}int main(){char pre[]="abdc";char in[]="bdac";printf("The result:");pronum(pre,0,strlen(in)-1,in,0,strlen(pre)-1);//getch();return 0;}
- 树遍历相关算法
- 二叉树遍历相关算法
- 二叉树所有相关遍历的算法
- 二叉树遍历相关
- 数据结构:图相关概念及遍历算法
- Java 二叉树遍历相关
- 二叉树相关算法——创建、遍历、求深度和广度
- 树的遍历算法
- 二叉树遍历算法
- 二叉树遍历算法
- 二叉树遍历算法
- 二叉树遍历算法
- java算法:树遍历
- 二叉树遍历算法
- 二叉树遍历算法
- 二叉树遍历算法
- 二叉树遍历算法
- 二叉树遍历算法
- C#委托(delegate)与事件(event)
- 天龙八部生成地形mesh的源码
- 联想Y460 XP下独显叹号
- 记录。
- 用路由器连接两台电脑如何设置
- 树遍历相关算法
- ZOJ 2314 Reactor Cooling 无源汇上下界可行流
- 复习之二分查找
- 堆和栈的区别
- 按行合并两个sql的查询结果
- 高中数学公式
- An incompatible version 1.1.14 of the APR based Apache Tomcat Native libra 警告
- svn 常用命令
- 中国航天科工集团与中国航天科技集团区别