【LeetCode-105】Construct Binary Tree from Preorder and Inorder Traversal
2016-05-17 20:59
417 查看
好久没写题了,写起来就有点不适应,上大学时知道怎么根据前序遍历和中序遍历来恢复一棵树,但是从来没有实现过,今天碰到了,终于把曾经留下的遗憾弥补了
public class ConstructBinaryTreefromPreorderandInorderTraversa {
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
public TreeNode buildTree(int[] preorder, int[] inorder) {
if(preorder.length == 0 || preorder.length != inorder.length){
return null;
}
return assistBuildTree(preorder, 0, preorder.length - 1, inorder, 0, inorder.length - 1);
}
public TreeNode assistBuildTree(int[] preorder,int pbegin,int pend,int[] inorder,int ibegin,int iend){
if(pbegin > pend){
return null;
}
int pivot = preorder[pbegin];
int i = ibegin;
//查找pivot在中序遍历中的位置
for(;i < iend;i ++){
if(inorder[i] == pivot){
break;
}
}
int leftLength = i - ibegin;
TreeNode root = new TreeNode(pivot);
//这里的开始下标和结束下标很重要
root.left = assistBuildTree(preorder, pbegin + 1, pbegin + leftLength, inorder, ibegin, i - 1);
root.right = assistBuildTree(preorder, pbegin + leftLength + 1, pend, inorder, i + 1, iend);
return root;
}
}
public class ConstructBinaryTreefromPreorderandInorderTraversa {
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
public TreeNode buildTree(int[] preorder, int[] inorder) {
if(preorder.length == 0 || preorder.length != inorder.length){
return null;
}
return assistBuildTree(preorder, 0, preorder.length - 1, inorder, 0, inorder.length - 1);
}
public TreeNode assistBuildTree(int[] preorder,int pbegin,int pend,int[] inorder,int ibegin,int iend){
if(pbegin > pend){
return null;
}
int pivot = preorder[pbegin];
int i = ibegin;
//查找pivot在中序遍历中的位置
for(;i < iend;i ++){
if(inorder[i] == pivot){
break;
}
}
int leftLength = i - ibegin;
TreeNode root = new TreeNode(pivot);
//这里的开始下标和结束下标很重要
root.left = assistBuildTree(preorder, pbegin + 1, pbegin + leftLength, inorder, ibegin, i - 1);
root.right = assistBuildTree(preorder, pbegin + leftLength + 1, pend, inorder, i + 1, iend);
return root;
}
}
相关文章推荐
- LeetCode-Construct Binary Tree from Inorder and Postorder Traversal
- LeetCode-Construct Binary Tree from Preorder and Inorder Traversal
- 【LeetCode-106】Construct Binary Tree from Inorder and Postorder Traversal
- SAXParserXml
- codeforces 675B Restoring Painting
- qsys初探————中断注册API
- Java图形界面开发—列出指定目录
- Java图形界面开发—列出指定目录
- 可视化篇:Echarts个人轨迹可视化实现
- poj2104K-th Number (主席树)
- 博客新地址
- 数组—— 2 sum, 3 sum, 3 sum closed, 4Sum.
- c++ algorithm 函数简介
- ASP.NET Web API 2 入门教程
- C#当前日期时间
- ASP.NET Web API 2 入门教程
- POJ 2393 Yogurt factory (贪心)
- HDU 3836 Equivalent Sets(强连通分量)
- 设计模式之原型模式
- 搭建一个私有Registry(加强版想做没做成功,楼主不会,真心求教!!!)