LeetCode_Construct Binary Tree from Preorder and Inorder Traversal

一.题目

Construct Binary Tree from Preorder and Inorder Traversal

Total Accepted: 36475 Total Submissions: 138308My
Submissions

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

Note:

You may assume that duplicates do not exist in the tree.

Show Tags

Have you met this question in a real interview?

Yes

No

Discuss

二.解题技巧

这道题仅仅是考察先序和中序遍历的概念,先序是先訪问根节点,然后訪问左子树。最后訪问右子树;中序遍历是先遍历左子树,然后訪问根节点。最后訪问右子树。

做法都是先依据先序遍历的概念,找到先序遍历的第一个值,即为根节点的值。然后依据根节点将中序遍历的结果分成左子树和右子树。然后就能够递归的实现了。

上述做法的时间复杂度为O(n^2)。空间复杂度为O(1)

三.实现代码

#include <iostream>
#include <algorithm>
#include <vector>

/**
* Definition for a binary tree node.
* struct TreeNode {
*     int val;
*     TreeNode *left;
*     TreeNode *right;
*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/

using std::vector;
using std::find;

struct TreeNode
{
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

class Solution
{
private:
    TreeNode* buildTree(vector<int>::iterator PreBegin, vector<int>::iterator PreEnd,
                        vector<int>::iterator InBegin, vector<int>::iterator InEnd)
    {
        if (PreBegin == PreEnd)
        {
            return NULL;
        }

        int HeadValue = *PreBegin;
        TreeNode *HeadNode = new TreeNode(HeadValue);

        vector<int>::iterator LeftEnd = find(InBegin, InEnd, HeadValue);
        if (LeftEnd != InEnd)
        {
            HeadNode->left = buildTree(PreBegin + 1, PreBegin + (LeftEnd - InBegin) + 1,
                             InBegin, LeftEnd);
        }

        HeadNode->right = buildTree(PreBegin + (LeftEnd - InBegin) + 1, PreEnd,
                                LeftEnd + 1, InEnd);

        return HeadNode;
    }
public:
    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder)
    {
        if (preorder.empty())
        {
            return NULL;
        }

        return buildTree(preorder.begin(), preorder.end(), inorder.begin(),
                         inorder.end());

    }
};

四.体会

这道题是考察基础概念的题。并不须要非常多算法,仅仅是一个递归的过程。

版权全部,欢迎转载,转载请注明出处,谢谢

时间: 2024-12-26 21:01:36

LeetCode_Construct Binary Tree from Preorder and Inorder Traversal的相关文章

[LeetCode]*105.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.求解树的子树.找出根节点在中序遍历中的位置,根左边的所有元素就是左子树,根右边的所有元

leetcode------Construct Binary Tree from Preorder and Inorder Traversal

标题: Construct Binary Tree from Preorder and Inorder Traversal 通过率: 26.5 难度: 中等 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 4 \

43: Construct Binary Tree from Preorder and Inorder Traversal

/************************************************************************/            /*       43:  Construct Binary Tree from Preorder and Inorder Traversal                            */            /**************************************************

LeetCode: Construct Binary Tree from Preorder and Inorder Traversal 解题报告

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. SOLUTION 1: 1. Find the root node from the preorder.(it

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. 分析:通过一个二叉树的先序遍历和中序遍历可以确定一个二叉树.先序遍历的第一个元素对应二叉树的根结点,由于在中序遍历中左子树和右子树的中序遍历序列分别在根节点两侧,因此我们可以确定左子树和右子树的中序遍历序列.在先序遍历序列中,

【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. 类似http://www.cnblogs.com/sunshineatnoon/p/3854935.html 只是子树的前序和中序遍历序列分别更新为: //左子树: left_prestart = prestart+1 lef

[leetcode]Construct Binary Tree from Preorder and Inorder Traversal @ Python

原题地址:http://oj.leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/ 题意:根据二叉树的先序遍历和中序遍历恢复二叉树. 解题思路:可以参照 http://www.cnblogs.com/zuoyuan/p/3720138.html 的思路.递归进行解决. 代码: # Definition for a binary tree node # class TreeNode: # d

【LeetCode-面试算法经典-Java实现】【105-Construct Binary Tree from Preorder and Inorder Traversal(构造二叉树)】

[105-Construct Binary Tree from Preorder and Inorder Traversal(通过前序和中序遍历构造二叉树)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 Given preorder and inorder traversal of a tree, construct the binary tree. Note: You may assume that duplicates do not exist in the

36. Construct Binary Tree from Inorder and Postorder Traversal &amp;&amp; Construct Binary Tree from Preorder and Inorder Traversal

Construct Binary Tree from Inorder and Postorder Traversal OJ: https://oj.leetcode.com/problems/construct-binary-tree-from-inorder-and-postorder-traversal/ Given inorder and postorder traversal of a tree, construct the binary tree. Note: You may assu