从二叉树的前序遍历序列和中序遍历序列重构出二叉树
来源:互联网 发布:道教地狱知乎 编辑:程序博客网 时间:2024/05/21 19:27
题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
题目来源:牛客网
问题分析
其实根据前序和中序的特点就可以做了,前序的第一个元素必定是根节点,那么在中序的序列中查找这个根节点的位置,两侧分为两部分,递归下去即可。
实现
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: struct TreeNode* reConstructBinaryTree(vector<int> pre, vector<int> in) { if (pre.empty()) return NULL; int mid = findPos(in, pre[0]); vector<int> left_p(pre.begin()+1, pre.begin()+mid+1), right_p(pre.begin()+mid+1, pre.end()); vector<int> left_i(in.begin(), in.begin()+mid), right_i(in.begin()+mid+1, in.end()); TreeNode* left = reConstructBinaryTree(left_p, left_i); TreeNode* right = reConstructBinaryTree(right_p, right_i); TreeNode* root = new TreeNode(pre[0]); root->left = left; root->right = right; return root; } size_t findPos(const vector<int>& v, int key) { for (size_t i = 0; i < v.size(); ++i) if (v[i] == key) return i; return -1; }};
0 0
- 从二叉树的前序遍历序列和中序遍历序列重构出二叉树
- 由二叉树的前序遍历序列和中序遍历序列求后序遍历序列
- 已知前序遍历序列和中序遍历序列,求二叉树的后序遍历
- 根据二叉树的前序遍历序列和中序遍历序列求二叉树的后序遍历序列
- 根据前序遍历序列和中序遍历序列构造二叉树
- 根据前序遍历序列和中序遍历序列构造二叉树算法
- 由前序遍历序列和中序遍历序列重建二叉树
- 如何根据前序遍历序列和中序遍历序列确定二叉树
- 根据前序遍历序列和中序遍历序列重建二叉树
- 前序遍历序列和中序遍历序列构造二叉树算法
- 根据前序遍历序列和中序遍历序列构造二叉树算法
- 根据前序遍历序列和中序遍历序列构造二叉树
- 根据前序遍历序列和中序遍历序列重建二叉树
- 根据前序遍历序列和中序遍历序列创建二叉树
- 如何根据前序遍历序列和中序遍历序列确定二叉树
- 根据前序遍历序列和中序遍历序列构造二叉树算法
- 前序遍历和中序遍历序列能确定唯一的一棵二叉树
- C++ 根据前序遍历序列和中序遍历序列可以构造唯一的二叉树
- iOS动态计算Label的宽高
- C++中如何在main函数体为空的情况打印出字符串"GeeksforGeeks"
- SVGALib
- POJ1017-Packets
- JavaWeb学习篇之----自定义标签&&JSTL标签库详解
- 从二叉树的前序遍历序列和中序遍历序列重构出二叉树
- java 为什么匿名内部类和局部内部类只能访问final变量
- MTT PRocess
- sed常用命令
- 1008. Elevator (20)
- hdu1260 水dp
- X86、X64和X86_64区别
- 为什么字符串hash的乘积取值33
- 【OpenGL】02 - OpenGL中的坐标系