(递归方法)不建立二叉树模型求解“根据前序序列、中序序列写出后序序列”的问题
思路算法实现本博客其他文章推荐
思路
通过前序序列顺序次序在中序序列中查找,利用中序序列的特性,向两边分治,先向左分治再向右分治,最后输出根节点; 这种思路会有很多重复解,所以我们还需借用visited数组去除不必要的重复解,即可得到后序序列输出而不建立二叉树。
算法实现
#include<iostream>
using namespace std
;
#define N 100
int search(int[],int,int,int);
void postOrderSeq(int,int[],int,int[],int,int);
int visited
[N
]={0};
int main(){
int preOrderSeq
[N
] = {1,2,4,3,5,6},inOrderSeq
[N
] = {2,4,1,5,3,6};
int len
= 6;
postOrderSeq(len
,preOrderSeq
,0,inOrderSeq
,0,len
);
}
int search(int inOrderSeq
[],int inStart
,int inEnd
,int x
){
for(int i
= inStart
;i
< inEnd
;i
++)
if(inOrderSeq
[i
] == x
)return i
;
return -1;
}
void postOrderSeq(int len
,int preOrderSeq
[],int preStart
,int inOrderSeq
[],int inStart
,int inEnd
){
for(int i
= preStart
;i
< len
;i
++){
int index
= search(inOrderSeq
,inStart
,inEnd
,preOrderSeq
[i
]);
if(index
!= -1&&visited
[index
]!=1) {
visited
[index
] = 1;
postOrderSeq(len
,preOrderSeq
,i
,inOrderSeq
,0,index
);
postOrderSeq(len
,preOrderSeq
,i
,inOrderSeq
,index
+1,inEnd
);
cout
<<preOrderSeq
[i
]<<" ";
}
}
}
本博客其他文章推荐
算法设计与分析之半数集问题
关于C++整型数组自动初始化为零的情况记录
算法设计与分析之线性时间选择
算法设计与分析之分治策略练习(下)
算法设计与分析之分治策略练习(上)
算法设计与分析之分治策略
转载请注明原文地址: https://mac.8miu.com/read-515036.html