重建二叉树
来源:互联网 发布:新丰县网络问政平台 编辑:程序博客网 时间:2024/06/05 03:15
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{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 {private: TreeNode* reConstructBinaryTree(const vector<int> &pre, int preFrom, const vector<int> &vin, int vinFrom, int len) { if(0 == len) { return 0; } TreeNode *root= new TreeNode(pre[preFrom]); if(1 == len) { return root; } int rootValue= pre[preFrom]; int vinPos= -1; for(int i= vinFrom; i< vinFrom+len; ++i) { if(rootValue == vin[i]) { vinPos= i; break; } } if(-1 == vinPos) { return 0; } int leftLen= vinPos- vinFrom; int rightLen= len- leftLen- 1; root->left= reConstructBinaryTree(pre, preFrom+1, vin, vinFrom, leftLen); root->right= reConstructBinaryTree(pre, leftLen+preFrom+1, vin, vinPos+1, rightLen); return root; }public: TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) { int preLen= pre.size(); int vinLen= vin.size(); if(preLen== 0 || vinLen == 0 || preLen!= vinLen) { return 0; } return reConstructBinaryTree(pre, 0, vin, 0, preLen); }};
阅读全文
0 0
- 3.9重建二叉树
- 重建二叉树
- 二叉树重建
- 二叉树重建
- 二叉树的重建
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 二叉树重建
- 二叉树重建
- 重建二叉树
- 重建二叉树
- 重建二叉树
- HDU 6098 Inversion (思维 17多校第六场)
- 2017 Multi-University Training Contest 6 solutions 1003 Inversion
- 表达式求值
- CodeVs.2370 小机房的树 ( LCA 倍增 最近公共祖先)
- 僵尸进程相关内容
- 重建二叉树
- Python语法易忘&速查笔记
- RecyclerView(六)设置下拉刷新
- QAQ & ORZ
- 正则表达式基础
- Java语言程序设计(原书第10版)基础篇 第一章课后答案
- 堆排序
- 012讲else with easygui和模块
- 多语言用户界面