已知二叉树的先序遍历和中序遍历,输出它的后序遍历
#include#include#include#includeusing namespace std;unordered_maprecord;vectorres;//先序遍历数组,中序遍历数组,当前处理的先序遍历数组的开始索引,当前处理的先序遍历数组的结束索引,当前处理的中序遍历数组的开始索引,当前处理的中序遍历数组的结束索引,//先序遍历数组,中序遍历数组, void my_buildTree(vector& preorder, vector& inorder, int pre_left, int pre_right, int in_left, int in_right){ //当前遍历的先序数组,元素已经没有了,返回空 if (pre_left>pre_right)return; // 在中序遍历中定位根节点 int root_index = record[preorder[pre_left]]; //创建一个根节点 //左子树的个数 int left_tree = root_index - in_left; //构建左子树 my_buildTree(preorder, inorder, pre_left + 1, pre_left + left_tree, in_left, root_index - 1); //构建右子树 my_buildTree(preorder, inorder, pre_left + left_tree + 1, pre_right, root_index + 1, in_right); res.push_back(inorder[root_index]);}int main(){ string pre; string in; cin >> pre >> in; vector preorder; vector inorder; for (int i = 0; i
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
暂时没有评论,来抢沙发吧~