LeetCode105. Construct Binary Tree from Preorder and Inorder Traversal

题目 

根据一棵树的前序遍历与中序遍历构造二叉树。

注意:
你可以假设树中没有重复的元素。

例如,给出

前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]

返回如下的二叉树:

    3
   / \
  9  20
    /  \
   15   7

Tag


代码

0x0017F7D7 处有未经处理的异常(在 test.exe 中): 0xC00000FD: Stack overflow (参数: 0x00000001, 0x01242FBC)。

我的方法对于大数据的问题会栈溢出。

class Solution {
public:
	TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
		if (preorder.empty() || inorder.empty())
			return nullptr;
		//root    
		TreeNode* root = new TreeNode(preorder[0]);
		TreeNode* cur = root;
		preorder.erase(preorder.begin());

		auto it = inorder.begin();
		for (; it != inorder.end(); it++)
		{

			if (root->val == *it)
			{
				break;
			}

		}//在inorder中找到根节点的迭代器

		vector<int> leftin;
		vector<int> rightin;
		for (auto item = inorder.begin(); item<it; item++)
		{
			leftin.push_back(*item); 
		}
		
		inorder.erase(inorder.begin(),it+1); 
		rightin = inorder;

		root->left = buildTree(preorder, leftin);
		root->right = buildTree(preorder, rightin);
		return root;
	}
};

 


问题

posted @ 2019-02-25 01:15  lightmare  阅读(128)  评论(0编辑  收藏  举报