文章标题
来源:互联网 发布:dede免费源码站 编辑:程序博客网 时间:2024/06/05 05:51
根据前序和中序遍历重建二叉树
class Solution {public: TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) { if(preorder.size() == 0 || inorder.size() == 0) return NULL; int start = 0; int pend = preorder.size() - 1; int iend = inorder.size() - 1; return helper(preorder,0,pend,inorder,0,iend); } TreeNode* helper(vector<int> preorder,int pstart,int pend,vector<int> inorder,int istart,int iend){ if(pstart > pend || istart > iend) return NULL; int key = preorder[pstart]; TreeNode* root = new TreeNode(key); int count = 0; if(pstart == pend) return root; while (inorder[istart+count]!=key ) { count++; } int pleft_start = pstart+1; int pleft_end = pstart + count; int pright_start = pleft_end + 1; int pright_end = pend; int ileft_start = istart; int ileft_end = ileft_start + count - 1; int iright_start = ileft_end + 2; int iright_end = iend; root->left = helper(preorder,pleft_start,pleft_end,inorder,ileft_start,ileft_end); root->right = helper(preorder,pright_start,pright_end,inorder,iright_start,iright_end); return root; }};
给定中序遍历和后序遍历
class Solution {public: TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) { if(postorder.size() == 0 || inorder.size() == 0) return NULL; int start = 0; int pend = postorder.size() - 1; int iend = inorder.size() - 1; return helper(postorder,0,pend,inorder,0,iend); } TreeNode* helper(vector<int>& postorder,int pstart,int pend,vector<int>& inorder,int istart,int iend){ if(pstart > pend || istart > iend) return NULL; int key = postorder[pend]; TreeNode* root = new TreeNode(key); int leftcount = 0; if(pstart == pend) return root; //求左子树个数 while (inorder[istart+leftcount]!=key ) { leftcount++; } //求右子树个数,总共的个数-左子树个数 int rightcount = iend - istart -leftcount ; //计算后序遍历的位置 int pright_start = pend - rightcount; int pright_end = pend -1; int pleft_start = pstart; int pleft_end = pstart + leftcount -1; //计算中序遍历的位置 int ileft_start = istart; int ileft_end = ileft_start + leftcount - 1; int iright_start = ileft_end + 2; int iright_end = iend; root->left = helper(postorder,pleft_start,pleft_end,inorder,ileft_start,ileft_end); root->right = helper(postorder,pright_start,pright_end,inorder,iright_start,iright_end); return root; }};
0 0
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- Libevent学习:介绍与安装
- FastReport.Net 在asp.net MVC中的运用
- Asp.net Core + EF Core + Bootstrap搭建的MVC后台通用管理系统模板(跨平台版本)
- Android应用开发SharedPreferences存储数据的使用方法
- AngularJS 指令
- 文章标题
- HDU 5735 Born Slippy
- POJ2377-Bad Cowtractors
- [172] Factorial Trailing Zeroes
- 【几何】平面线段交
- HDU 5742 It's All In The Mind(思维水)
- C++ pure virtual function call
- Unity全面的面试题(包含答案)
- 1074. Reversing Linked List (25)