1、数组a在函数中的传递:int *a 2、根结点为后序遍历的最后一个 3、在中序遍历中查找根结点 4、//对左子树来查找根结点 //对右子树来查找根结点
#include <bits/stdc++.h> using namespace std; /* 2 3 1 5 7 6 4 后序 1 2 3 4 5 6 7 中序 1、root=4 2、i=3 3、getpre(a,b,3) 4、getpre(a+3,b+3+1,7-3-1) 4、getpre(a+3,b+4,3) a: 2 3 1 b: 1 2 3 3 a: 5 7 6 b: 5 6 7 3 */ void getpre(int *a,int *b,int n) //其中数组a为后序,b为中序,n为每次遍历数目,用来求c这个先序 { if(n>0) { int root = a[n-1]; //根结点为后序遍历的最后一个 int i; for(i=0;i<n;i++) //在中序遍历中查找根结点 { if(b[i] == root) { break; } } cout << " " << root; getpre(a, b, i); //对左子树来查找根结点 getpre(a+i, b+i+1, n-i-1); //对右子树来查找根结点 } } int main() { int n; cin >> n; int a[n],b[n],c[n]; //a[n]后序 b[n]中序 for(int i=0;i<n;i++) { cin >> a[i]; //输入后序 } for(int i=0;i<n;i++) { cin >> b[i]; //输入中序 } cout << "Preorder:"; getpre(a,b,n); //先序 return 0; }