二叉树求序
来源:互联网 发布:万得数据 编辑:程序博客网 时间:2024/06/05 05:57
数组实现已知(中序+一序)求另一序。
中序先序求后序
算法的核心在于,每次先将结点存放在当前树的最后一个位置,再递归结点的子树,不断递归。#include "stdio.h"int pre[6],in[6],post[6];void solve(int preL,int inL,int postL,int n){ if(n==0) return; if(n==1){ post[postL] = pre[preL]; return; } int root = pre[preL]; int i; post[postL+n-1] = root; for(i=0;i<n;i++) if(in[inL+i]==root) break; int L=i; int R=n-L-1; solve(preL+1,inL,postL,L); //左子树 solve(preL+1+L,inL+L+1,postL+L,R);}int main(){ for(int i=0;i<6;i++){ scanf("%d",&pre[i]); } for(int i=0;i<6;i++){ scanf("%d",&in[i]); } solve(0,0,0,6); for(int i=0;i<6;i++){ printf("%d ",post[i]); }}
中序后序求先序
算法的核心在于,每次先将结点存放在当前树的第一个位置,再递归结点的子树,不断递归。#include "stdio.h"int in[6],post[6],pre[6];void solve(int preL,int inL,int postL,int n) //当前树的前序、中序、后序第一个元素的下标,当前树元素的个数{ if(n==0) return; if(n==1){ pre[preL] = post[postL]; return; } int root = post[postL+n-1]; pre[preL] = root; int i; for(i=0;i<n;i++) if(in[inL+i]==root) break; int L = i; int R = n-L-1; solve(preL+1,inL,postL,L); solve(preL+1+L,preL+L+1,postL+L,R);}int main(){ for(int i=0;i<6;i++) scanf("%d",&in[i]); for(int i=0;i<6;i++) scanf("%d",&post[i]); solve(0,0,0,6); for(int i=0;i<6;i++){ printf("%d ",pre[i]); }}
阅读全文
0 0
- 二叉树求序
- 二叉树、二叉堆
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- hash_map
- 把一个c类的网络地址192-168-1-0划分为6个子网,请计算出...
- 欢迎使用CSDN-markdown编辑器
- Python time strftime()方法
- vuex下state数据的存储
- 二叉树求序
- time.h 详细介绍
- Lua 开篇
- vim与vi的区别,及常用操作,有查找关键词,向上向下翻页,快速跳到一行首末尾,设置取消行号,撤销编辑
- SVN显示提交时间,提交人等信息
- iFunk:用户全方位享乐体验的升级
- 学习C++要做笔记1(引用)
- 阿里云加密服务使用教程
- 微信开发笔记(1)——配置微信服务器、验证信息安全性