4、重建二叉树
来源:互联网 发布:顺丰速运成本数据分析 编辑:程序博客网 时间:2024/06/06 01:55
题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
时间限制:1秒 空间限制:32768K
思想:递归的思路,通过寻找中序遍历中的根节点,把树的左右两部分分出来,然后再分别对左右两部分递归调用。
代码:
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) { int len = pre.size(); if(len!=vin.size() || len==0) return NULL; //根节点一定是前序的第一个 TreeNode *head = new TreeNode(pre[0]); int root = 0;//用root来记录根节点在中序里的第几个(从而分成左右两部分) for(int i = 0;i < len;i++){ if(vin[i]==pre[0]){ root = i; break; } } vector<int> left_pre,right_pre,left_vin,right_vin; for(int i = 0;i < root;i++){ left_vin.push_back(vin[i]); left_pre.push_back(pre[i+1]);//因为第0个是根节点,从第一个开始 } for(int i = root+1;i < len;i++){ right_vin.push_back(vin[i]); right_pre.push_back(pre[i]); } head->left = reConstructBinaryTree(left_pre,left_vin); head->right = reConstructBinaryTree(right_pre,right_vin); return head; }};
0 0
- 【4】重建二叉树
- 4、重建二叉树
- 剑指offer:(4)树:重建二叉树
- 剑指offer 4 重建二叉树
- 剑值offer(4)-重建二叉树
- 《剑指offer》—4、重建二叉树
- 剑指Offer(4)______重建二叉树
- 剑指offer(4)—重建二叉树
- 剑指offer--(4) 重建二叉树
- [剑指offer]算法4 重建二叉树
- 3.9重建二叉树
- 重建二叉树
- 二叉树重建
- 二叉树重建
- 二叉树的重建
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 批量删除C#注释(适用于vs开发环境)
- java MyBatis报错Parameter Maps collection does not contain value for xxx
- centos7下安装tomcat apr
- String.indexof(str)的用法
- 不要再使用MD5和SHA1加密密码了!
- 4、重建二叉树
- lettcode189Rotate Array
- Linux问题集
- AD进行行PCB DRC检查时,软件提示...report_drc.xsl不存在
- 设计模式之代理模式
- Runtime.getRuntime().exec();
- python3 .format()函数
- caffe︱深度学习参数调优杂记+caffe训练时的问题+dropout/batch Normalization
- Objective-C与JavaScript交互的那些事