leetcode:二叉树之Construct Binary Tree from Preorder and Inorder Traversal
来源:互联网 发布:windows账户登录不了 编辑:程序博客网 时间:2024/06/05 09:29
leetcode:二叉树之Construct Binary Tree from Preorder and Inorder Traversal
题目:
Given preorder and inorder traversal of a tree, construct the binary tree.
Note: You may assume that duplicates do not exist in the tree.
即,根据给定的二叉树的前序遍历与中序遍历,构建二叉树
例如:一未知的二叉树的前序遍历为:[1,2,3,4,5,6],其中序遍历为:[3,2,4,1,5,6]
由前序遍历与中序遍历我们可以得到二叉树为:
我们根据上图可以得到其后序遍历为:[3,4,2,6,5,1],我们利用其后序遍历来验证二叉树是否构建成功。
c++实现:
#include <iostream>#include <vector>using namespace std;struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) { }};template<typename InputIterator>TreeNode* build(InputIterator pre_first, InputIterator pre_last,InputIterator in_first, InputIterator in_last);TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder){return build(begin(preorder), end(preorder),begin(inorder), end(inorder));}template<typename InputIterator>TreeNode* build(InputIterator pre_first, InputIterator pre_last,InputIterator in_first, InputIterator in_last){if (pre_first == pre_last)return NULL;if (in_first == in_last) return NULL;auto root = new TreeNode(*pre_first);auto inRootPos = find(in_first, in_last, *pre_first);auto leftSize = distance(in_first, inRootPos);root->left = build(next(pre_first), next(pre_first,leftSize + 1), in_first, next(in_first, leftSize));root->right = build(next(pre_first, leftSize + 1), pre_last,next(inRootPos), in_last);return root;}void postorderTraverse(TreeNode* &T){ if(T)//当结点不为空的时候执行{ postorderTraverse(T->left);// postorderTraverse(T->right); cout<<T->val;} else cout<<""; }int main(){int preorder[6]={1,2,3,4,5,6}; int inorder[6]={3,2,4,1,5,6}; vector<int>pre(preorder,preorder+6);vector<int>in(inorder,inorder+6);TreeNode* Tree(0);Tree=buildTree(pre, in);postorderTraverse(Tree);cout<<endl; return 0;}测试结果;
0 0
- leetcode:二叉树之Construct Binary Tree from Preorder and Inorder Traversal
- leetcode之Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode之Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode之Construct Binary Tree from Preorder and Inorder Traversal
- leetcode之Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode之Construct Binary Tree from Preorder and Inorder Traversal
- leetcode之Construct Binary Tree from Preorder and Inorder Traversal
- 【Leetcode】之Construct Binary Tree from Preorder and Inorder Traversal
- Leetcode Construct Binary Tree from Preorder and Inorder Traversal 前序中序遍历重组二叉树
- LeetCode Construct Binary Tree from Preorder and Inorder Traversal(构造二叉树)
- *(leetcode) Construct Binary Tree from Preorder and Inorder Traversal (tree)
- LeetCode[Tree]: Construct Binary Tree from Preorder and Inorder Traversal
- [leetcode][tree] Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode: Construct Binary Tree from Preorder and Inorder Traversal
- [LeetCode]Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode Construct Binary Tree from Preorder and Inorder Traversal
- [Leetcode] Construct Binary Tree from Preorder and Inorder Traversal
- Leetcode: Construct Binary Tree from Preorder and Inorder Traversal
- B树,B+树,B*树以及R树的介绍
- 杨辉三角 HDU2032
- 业务知识——上诉、抗诉、起诉、自诉的区别
- Python处理验证码第一篇(pytesser初探及报错处理)
- JSP页面上的中文数据传到后台乱码处理汇总
- leetcode:二叉树之Construct Binary Tree from Preorder and Inorder Traversal
- 二维树状数组
- PL/SQL实例 navicat创建存储过程
- 一个关于椭圆曲线密码学的初级读本
- Android绘制间隔平行四边形虚线
- bootstrap table + spring + springmvc + mybatis 实现从前端到后端的表格分页
- 注册开发者账号出现Sorry, you can’t enroll at this time.
- SQL将一行多列数据合并成 一列
- Ehcache使用