由先序、中序遍历求后序遍历 递归算法
问题解决
- 突破点在先序和中序遍历能给出什么信息?根节点。
- ACM的输出对格式要求比较严格:输出时字符与字符之间有间隔,然而最后一个字符后面并不希望出现空格符。
-
不说多的,直接上代码:
#include <iostream> using namespace std; void BinaryTreeFromOrderings(int *preorder, int *inorder, int length ,int pr) { if(length <= 0) { return; } int thisNode = *preorder; int rootIndex = 0; for(;rootIndex < length; rootIndex++) { if(inorder[rootIndex] == *preorder) break; } BinaryTreeFromOrderings(preorder+1, inorder, rootIndex,pr); //左子树递归 BinaryTreeFromOrderings(preorder + rootIndex + 1,inorder + rootIndex + 1,length - (rootIndex + 1),pr); //右... cout<<thisNode; if (thisNode!=pr) { cout<<" "; //后序遍历最后一个字符即为先序遍历第一个字符,以此作为遍历结束的标志 } return; } int main(int argc, char* argv[]) { int n; int pre[1000]; int in[1000]; while (cin>>n) { for (int i=0; i<n; i++) { cin>>pre[i]; } for (int i=0; i<n; i++) { cin>>in[i]; } BinaryTreeFromOrderings(pre,in, n,pre[0]); printf("\n"); } return 0; }

浙公网安备 33010602011771号