Construct Binary Tree from Preorder and Inorder Traversal

原创 2016年08月30日 12:37:08

一、问题描述

Given preorder and inorder traversal of a tree, construct the binary tree.

二、思路

二叉树的题目用递归做是最便捷的,本题也不例外。

递归的退出条件是:

       if(pre_begin > preorder.size() - 1 || in_begin > in_end) return NULL;

最关键的是在先序遍历中找出当前节点的值,即root -> val。还有我们在循环中加入break,可以使我们的运行时间从20ms减少到16ms。

在执行递归的时:

左子树在先序遍历指向下一个节点,即左子树的起始位置,在中序遍历中的范围是(in_begin,index  - 1);

右子树在先序遍历指向是当前位置减去中序遍历开始的位置,即右子树的起始位置,中序遍历中的范围是(index  + 1, in_end);

三、代码

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
        return creatTree(0, 0, inorder.size() - 1, preorder, inorder);
    }
    TreeNode* creatTree(int pre_begin, int in_begin, int in_end, vector<int>& preorder, vector<int>& inorder){
       if(pre_begin > preorder.size() - 1 || in_begin > in_end) return NULL;
       TreeNode *root = new TreeNode(preorder[pre_begin]);
       int index = 0; 
       for (int i = in_end; i >= in_begin; --i) {
            if (inorder[i] == root -> val) {
                index = i;
                break;
            }
       }
       root -> left = creatTree(pre_begin + 1, in_begin, index - 1, preorder, inorder);
       root -> right = creatTree(pre_begin + index - in_begin + 1, index + 1, in_end, preorder, inorder);
       return root;
    }
};


版权声明:本文为博主原创文章,未经博主允许不得转载。

LeetCode 144 Binary Tree Preorder Traversal(二叉树的前序遍历)+(二叉树、迭代)

翻译给定一个二叉树,返回其前序遍历的节点的值。例如: 给定二叉树为 {1,#, 2, 3} 1 \ 2 / 3 返回 [1, 2, 3]备注:用递归是微不足道的,...
  • NoMasp
  • NoMasp
  • 2016年03月19日 16:15
  • 3065

【LeetCode-面试算法经典-Java实现】【103-Binary Tree Zigzag Level Order Traversal(二叉树分层Z字形遍历)】

【103-Binary Tree Zigzag Level Order Traversal(二叉树分层Z字形遍历)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Give...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月08日 06:35
  • 2565

Binary Tree Inorder Traversal——二叉树的中序遍历

原题: Given a binary tree, return the inorder traversal of its nodes' values. =>给定一个二叉树,返回所有节点的中序遍历 ...
  • u011960402
  • u011960402
  • 2014年02月07日 09:21
  • 2223

Construct Binary Tree from Preorder and Inorder Traversal

  • 2014年10月24日 12:16
  • 2KB
  • 下载

【leetcode】105. Construct Binary Tree from Preorder and Inorder Traversal

【leetcode】105. Construct Binary Tree from Preorder and Inorder Traversal
  • chenyj92
  • chenyj92
  • 2016年05月03日 16:23
  • 327

leetcode_105_Construct Binary Tree from Preorder and Inorder Traversal

思路: 1.将中序遍历序列和其对应的下标存储到一个map中,方便下面的查找 2.递归选取前序序列的第一个元素作为树的根节点,然后查找根节点在前序序列中位置inorderIndex,inorderIn...
  • dfb198998
  • dfb198998
  • 2015年04月03日 14:51
  • 646

[Leetcode] 105. Construct Binary Tree from Preorder and Inorder Traversal 解题报告

题目: Given preorder and inorder traversal of a tree, construct the binary tree. Note: You ma...
  • magicbean2
  • magicbean2
  • 2017年04月24日 10:42
  • 139

LeetCode105 Construct Binary Tree from Preorder and Inorder Traversal

详细见:leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal Java Soluti...
  • zxwtry
  • zxwtry
  • 2017年04月27日 22:00
  • 99

算法:Construct Binary Tree from Preorder and Inorder Traversal

Given preorder and inorder traversal of a tree, construct the binary tree. /** * Definition fo...
  • NicolasYan
  • NicolasYan
  • 2016年09月13日 10:54
  • 357

LeetCode105—Construct Binary Tree from Preorder and Inorder Traversal

LeetCode105—Construct Binary Tree from Preorder and Inorder Traversal
  • zhangxiao93
  • zhangxiao93
  • 2016年03月29日 21:36
  • 450
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Construct Binary Tree from Preorder and Inorder Traversal
举报原因:
原因补充:

(最多只允许输入30个字)