问题描述:
给定一棵二叉树,已知二叉树的前序中序遍历序列,设计一个算法,确定该二叉树的后序遍历的序列。
数据结构:
采用STL中的string实现。
算法分析:
在中序序列中查找前序序列中的首元素,作为根节点,根节点之前为左子树的中序,之后为右子树的中序,然后对左右子树递归调用,直到子树元素为一个,即长度为一,输出。
时空复杂度分析
时间复杂度O(n);
空间复杂度O(n);
(n为节点数)
源代码:
#include <string> #include <iostream> using namespace std; void PIOto_PostO(string s1,string s2) { int k,len; string ts1,ts2; len=s1.length(); if (len==1) printf("%c",s1[0]); else { k=s2.find(s1[0]); if (k>0) { ts1=s1.substr(1,k); ts2=s2.substr(0,k); PIOto_PostO(ts1,ts2); } if (k<len-1) { ts1=s1.substr(k+1,len-k-1); ts2=s2.substr(k+1,len-k-1); PIOto_PostO(ts1,ts2); } printf("%c",s2[k]); } } int main() { string sp,st; //freopen("treer.in","r",stdin); //freopen("treer.out","w",stdout); while (cin>>sp>>st) { PIOto_PostO(sp,st); cout<<endl; } return 0; }
本文介绍了一种算法,该算法可以根据给定的二叉树前序和中序遍历序列来确定其后序遍历序列。通过递归地划分二叉树的左子树和右子树,最终输出后序遍历结果。算法的时间复杂度为O(n),空间复杂度也为O(n),适用于计算机科学领域的数据结构与算法课程。
4638

被折叠的 条评论
为什么被折叠?



