原题地址

思路:

leetcode105题差不多,这道题是给中序和后序,求出二叉树。

解法一:

思路和105题差不多,只是pos是从后往前遍历,生成树顺序也是先右后左。

class Solution {
public:
TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) {
int pos = postorder.size() - 1;
return dfs(inorder, postorder, 0, inorder.size(), pos);
} private:
TreeNode *dfs(vector<int> &inorder, vector<int> &postorder, int beg, int end,
int &pos) {
TreeNode *node = NULL;
if (beg < end) {
int i = 0;
for (i = beg; i < end; ++i)
if (postorder[pos] == inorder[i]) break;
pos--;
node = new TreeNode(inorder[i]);
node->right = dfs(inorder, postorder, i + 1, end, pos);
node->left = dfs(inorder, postorder, beg, i, pos);
}
return node;
}
};
解法二:

解法二是看了别人的题解入手的,和解法一不同思路的是对两个序都用一组beg和end来划分区间。

中序(beg,end)很好划分,假设mid指向当前节点的root值,则分为mid前一半和mid后一半。

后序(pbeg,pend)的划分,是mid - beg的这一段距离。

class Solution
{
public:
TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder)
{
return dfs(inorder, postorder, 0, inorder.size(), 0, postorder.size());
} private:
TreeNode *dfs(vector<int> &inorder, vector<int> &postorder, int beg, int end,
int pbeg, int pend)
{
TreeNode *node = NULL;
if (beg < end)
{
int i = 0;
for (i = beg; i < end; ++i)
if (postorder[pend - 1] == inorder[i])
break;
node = new TreeNode(inorder[i]);
node->left = dfs(inorder, postorder, beg, i, pbeg, pbeg + i - beg);
node->right =
dfs(inorder, postorder, i + 1, end, pbeg + i - beg, pend - 1);
}
return node;
}
};

解法一好理解,但是速度慢,用了16ms,击败46%

解法二难点在于理解后序区间划分的依据,用了12ms,击败78%

虽然做了105题,但是做这题还是花了一个半小时。

还是因为不够深入的理解原理,不能总是光看题解就过了。

[leetcode] 106. Construct Binary Tree from Inorder and Postorder Traversal(medium)的更多相关文章

  1. LeetCode 106. Construct Binary Tree from Inorder and Postorder Traversal (用中序和后序树遍历来建立二叉树)

    Given inorder and postorder traversal of a tree, construct the binary tree. Note:You may assume that ...

  2. Java for LeetCode 106 Construct Binary Tree from Inorder and Postorder Traversal

    Construct Binary Tree from Inorder and Postorder Traversal Total Accepted: 31041 Total Submissions: ...

  3. (二叉树 递归) leetcode 106. Construct Binary Tree from Inorder and Postorder Traversal

    Given inorder and postorder traversal of a tree, construct the binary tree. Note:You may assume that ...

  4. [LeetCode] 106. Construct Binary Tree from Inorder and Postorder Traversal 由中序和后序遍历建立二叉树

    Given inorder and postorder traversal of a tree, construct the binary tree. Note:You may assume that ...

  5. C#解leetcode 106. Construct Binary Tree from Inorder and Postorder Traversal

    Given inorder and postorder traversal of a tree, construct the binary tree. Note:You may assume that ...

  6. LeetCode 106. Construct Binary Tree from Inorder and Postorder Traversal 由中序和后序遍历建立二叉树 C++

    Given inorder and postorder traversal of a tree, construct the binary tree. Note:You may assume that ...

  7. Leetcode#106 Construct Binary Tree from Inorder and Postorder Traversal

    原题地址 二叉树基本操作 [       ]O[              ] [       ][              ]O 代码: TreeNode *restore(vector<i ...

  8. 【LeetCode】106. Construct Binary Tree from Inorder and Postorder Traversal 解题报告

    [LeetCode]106. Construct Binary Tree from Inorder and Postorder Traversal 解题报告(Python) 标签: LeetCode ...

  9. 【LeetCode】106. Construct Binary Tree from Inorder and Postorder Traversal

    Construct Binary Tree from Inorder and Postorder Traversal Given inorder and postorder traversal of ...

随机推荐

  1. Access Violation分成两大类:运行期和设计期(很全的解释)

    用Delphi开发程序时,我们可以把遇到的Access Violation分成两大类:运行期和设计期. 一.设计期的Access Violation 1.硬件原因  在启动或关闭Delphi IDE以 ...

  2. 可视化流程设计——流程设计器演示(基于Silverlight)

    上一篇文章<通用流程设计>对鄙人写的通用流程做了一定的介绍,并奉上了相关源码.但一个好的流程设计必少不了流程设计器的支持,本文将针对<通用流程设计>中的流程的设计器做一个简单的 ...

  3. IIS6利用URLScan修复IIS短文件名漏洞

    一.下载URLScan 3.1 链接: http://pan.baidu.com/s/1i4HfKrj 密码: dmud 二.安装URLScan 3.1 安装完成以后,我们可以在System32/In ...

  4. 文件夹管理工具(MVC+zTree+layer)

    文件夹管理工具(MVC+zTree+layer)(附源码)   写在前 之前写了一篇关于 文件夹与文件的操作的文章  操作文件方法简单总结(File,Directory,StreamReader,St ...

  5. Win7 访问 数据库 慢

    不让TCP/IP调谐拖累网速 在Windows Server 2008工作环境中,下载访问网络中大容量的文件内容时,我们有时会感觉到网络连接速度非常缓慢,严重的时候还会出现不能访问的现象.遭遇这类故障 ...

  6. hadoop之hive高级操作

    在输出结果较多,需要输出到文件中时,可以在hive CLI之外执行hive -e "sql" > output.txt操作 但当SQL语句太长或太多时,这种方式不是很方便,可 ...

  7. 简单了解HashCode()

    在java的内部类中,计算HashCode通常使用 code = 元素* 31 + 下一个元素 以String为例 public int hashCode() { int h = hash; if ( ...

  8. Sqoop 简介与安装

    一.Sqoop 简介 Sqoop是一个常用的数据迁移工具,主要用于在不同存储系统之间实现数据的导入与导出: 导入数据:从MySQL,Oracle等关系型数据库中导入数据到HDFS.Hive.HBase ...

  9. laravel扩展包-私有库

    创建一个新的laravel项目 composer create-project --prefer-dist laravel/laravel laravel-package "5.5.*&qu ...

  10. 【原创】面试官:讲讲mysql表设计要注意啥

    引言 近期由于复习了一下mysql的内容,有些心得.随手讲其中一部分知识,都是一些烟哥自己平时工作的总结以及经验.大家看完,其实能避开很多坑.而且很多问题,都是面试中实打实会问到的! 比如 OK,具体 ...