Construct Binary Tree from Preorder and Inorder Traversal LeetCode 105
2015-05-27 10:22
316 查看
题目描述:
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
分析:
已知二叉树的先序序列和中序序列构造二叉树,该二叉树必然是唯一的。先序序列的首元素必然是二叉树的根,然后该元素将中序序列中的元素分为两个子序列,左边的序列由左子树构成,右边的序列由右子树构成,于是可以递归的处理左序列和有序列,分别产生左子树和右子树。
以下是C++实现代码,实现中要注意参数传递采用引用传递的方式,这样可以避免拷贝数组,降低内存消耗,否则会发生内存超限的错误。
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
分析:
已知二叉树的先序序列和中序序列构造二叉树,该二叉树必然是唯一的。先序序列的首元素必然是二叉树的根,然后该元素将中序序列中的元素分为两个子序列,左边的序列由左子树构成,右边的序列由右子树构成,于是可以递归的处理左序列和有序列,分别产生左子树和右子树。
以下是C++实现代码,实现中要注意参数传递采用引用传递的方式,这样可以避免拷贝数组,降低内存消耗,否则会发生内存超限的错误。
/**//////////////////56ms/////*/ /** * 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: void buildHelp(TreeNode* &r,vector<int>& pre,vector<int>& in,int preLef,int preRig,int inLef,int inRig) //根据先序和中序子序列构造节点 { if(inLef > inRig) //表示空二叉树 r = NULL; else { r = new TreeNode(pre[preLef]); //利用先序序列的首元素生成根节点 int mid = inLef; while(in[mid] != pre[preLef]) //在中序序列中找到根节点对应的元素,将中序序列分割为左右两个中序子序列 mid++; buildHelp(r->left,pre,in,preLef+1,preLef+mid-inLef,inLef,mid-1); //利用左子序列的先序和中序构造左子树 buildHelp(r->right,pre,in,preLef+1+mid-inLef,preRig,mid+1,inRig); //利用右子序列的先序和中序构造右子树 } } TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) { int n = preorder.size(); if(n == 0) return NULL; TreeNode *r; buildHelp(r,preorder,inorder,0,n-1,0,n-1); //调用辅助函数,构造二叉树 return r; } };
相关文章推荐
- [LeetCode 105] Construct Binary Tree from Preorder and Inorder Traversal
- 【LEETCODE】105-Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode(105) Construct Binary Tree from Preorder and Inorder Traversal
- leetcode 105-106:Construct Binary Tree from Preorder and Inorder Traversal
- Leetcode[105]-Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode_105 Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode题解-105-Construct Binary Tree from Preorder and Inorder Traversal
- Leetcode 105 Construct Binary Tree from Preorder and Inorder Traversal
- 【LeetCode-面试算法经典-Java实现】【105-Construct Binary Tree from Preorder and Inorder Traversal(构造二叉树)】
- 【leetcode】Array——Construct Binary Tree from Preorder and Inorder Traversal(105)
- C++详解Leetcode:105. Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode: Construct Binary Tree from Preorder and Inorder Traversal [105]
- [LeetCode]105 Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode 105/106 Construct Binary Tree from Preorder/Postorder and Inorder Traversal
- 【leetcode】【105】Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode105 Construct Binary Tree from Preorder and Inorder Traversal
- [leetcode-105]Construct Binary Tree from Preorder and Inorder Traversal(java)
- LeetCode 105 Construct Binary Tree from Preorder and Inorder Traversal
- [JAVA]LeetCode105 Construct Binary Tree from Preorder and Inorder Traversal
- leetcode 105 —— Construct Binary Tree from Preorder and Inorder Traversal