首页 > 代码库 > 根据先序和中序实现后序
根据先序和中序实现后序
题目:已知先序和中序的数组,求输出后序输出结果。思路:根据先序和中序去建一棵二叉树然后后序遍历二叉树
#include<iostream>#include<string>#include<vector>#include<algorithm>using namespace std;struct node{ int value; struct node* left; struct node* right; node(int _val) :value(_val){ left = NULL; right = NULL; }};node* helper(vector<int>& preorder, int i, int j, vector<int>& inorder, int ii, int jj){ // tree 8 4 5 3 7 3 // preorder 8 [4 3 3 7] [5] // inorder [3 3 4 7] 8 [5] // 每次从 preorder 头部取一个值 mid,作为树的根节点 // 检查 mid 在 inorder 中 的位置,则 mid 前面部分将作为 树的左子树,右部分作为树的右子树 if (i >= j || ii >= j) return NULL; int mid = preorder[i]; auto f = find(inorder.begin() + ii, inorder.begin() + jj, mid); int dis = f - inorder.begin() - ii; node* root = new node(mid); root->left = helper(preorder, i + 1, i + 1 + dis, inorder, ii, ii + dis); root->right = helper(preorder, i + 1 + dis, j, inorder, ii + dis + 1, jj); return root;}node* buildTree(vector<int>& preorder, vector<int>& inorder) { return helper(preorder, 0, preorder.size(), inorder, 0, inorder.size());}void postrecursive(node *root){ if (!root)return; if (root->left != NULL)postrecursive(root->left); if (root->right != NULL)postrecursive(root->right); cout << root->value << " ";}int main(){ int a[7] = {1,2,4,5,3,6,7}; int b[7] = {4,2,5,1,3,7,6}; vector<int>pre(a,a+7); vector<int>mid(b,b+7); node *root = buildTree(pre,mid); postrecursive(root); cin.get(); return 0;}
根据先序和中序实现后序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。