leetcode_105题——Construct Binary Tree from Preorder and Inorder Traversal(树,递归)

Construct Binary Tree from Preorder and Inorder Traversal

Total Accepted: 32279 Total Submissions: 122094My Submissions

Question Solution

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

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

Hide Tags

Tree Array Depth-first Search

Have you met this question in a real interview?

Yes

No

Discuss

这道题给了你二叉树前序遍历和中序遍历的结果(以vector的形式给的,其中没有那些不存在的点),所以在前序遍历中第一个肯定是根节点

这道题采用递归的方法来做,因为在前序遍历中的第一个点,在中序遍历中,它的左边为其左子树,右边为其右子树,这样依次向下递归就可以构造出了二叉树。

下面是AC的解法

#include<iostream>
#include <vector>
using namespace std;

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

/*找到a在vec中的位置*/
int laocation_vector(vector<int>& vec,int a,int i,int j)
{
	for(int k=i;k<=j;++k)
		if(vec[k]==a)
			return k;
	return -1;
}

/*i,j是范围,k是开始计算第几个*/
void pre_construct(vector<int>& preorder,vector<int>& inorder,TreeNode** root,int i,int j,int& k)
{
	if(k>=preorder.size())
	{
		*root=NULL;
		return;
	}
	int loacte_in=laocation_vector(inorder,preorder[k],i,j);
	if(loacte_in<i||loacte_in>j)
	{
		*root=NULL;
		return;
	}
	*root=(TreeNode*)malloc(sizeof(TreeNode));
	(*root)->val=preorder[k];
	k++;
	pre_construct(preorder,inorder,&(*root)->left,i,loacte_in-1,k);
	pre_construct(preorder,inorder,&(*root)->right,loacte_in+1,j,k);
	return;
}
/*这个函数来主要调用*/
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder)
{
	TreeNode* root=NULL;
	if(preorder.size()==NULL)
		return root;
	int k=0;
	pre_construct(preorder,inorder,&root,0,(preorder.size()-1),k);
	return root;
}
int main()
{
	vector<int> vec_pre;
	vector<int> vec_in;
	vec_pre.push_back(1),vec_pre.push_back(2);
	vec_in.push_back(2),vec_in.push_back(1);
	TreeNode* root;
	root=buildTree(vec_pre,vec_in);
}

  

时间: 2024-10-08 12:11:04

leetcode_105题——Construct Binary Tree from Preorder and Inorder Traversal(树,递归)的相关文章

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

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

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

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 tree. 题解: 1 / \ 2 3 / \ / \ 4 5 6 7 对于上图的树来说, index: 0 1 2 3 4 5 6 先序遍历为: 1 2 4 5 3 6 7 中序遍历为: 4 2 5 1 6 3 7为了清晰表示

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)思路:a.根据前序遍历的特点, 知前序序列(PreSequence)的首个元素(PreSequence[0])为二叉树的根(root),  然后在中序序列(InSequence)中查找此根(