【Leetcode】Construct Binary Tree from Inorder and Postorder Traversal
2016-05-21 22:17
423 查看
题目链接:https://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 assume that duplicates do not exist in the tree.
思路:
easy
算法:
[java] view
plain copy
public TreeNode buildTree(int[] inorder, int[] postorder) {
if (inorder == null || inorder.length == 0 || postorder == null || postorder.length == 0) {
return null;
}
// 在前序排列中,从头开始查找定位: 第一个既在后序也在中序的元素位置,以及它在后序中的位置
int start = -1, pindex = -1;// start是后序中的位置 index是中序的位置
for (int i = postorder.length - 1; i >= 0; i--) {
int tmp = search(inorder, postorder[i]);
if (tmp >= 0) {
pindex = tmp;
start = i;
break;
}
} // ====end
TreeNode root = new TreeNode(postorder[start]);
if (inorder.length == 1) {
return root;
}
// 根据index划分中序排列
int leftInorder[] = Arrays.copyOfRange(inorder, 0, pindex);
int rightInorder[] = Arrays.copyOfRange(inorder, pindex + 1, inorder.length);
int newpreorder[] = Arrays.copyOfRange(postorder, 0, start);
root.left = buildTree(leftInorder, newpreorder);
root.right = buildTree(rightInorder, newpreorder);
return root;
}
public int search(int nums[], int target) {
for (int i = 0; i < nums.length; i++) {
if (nums[i] == target)
return i;
}
return -1;
}
题目:
Given inorder and postorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
思路:
easy
算法:
[java] view
plain copy
public TreeNode buildTree(int[] inorder, int[] postorder) {
if (inorder == null || inorder.length == 0 || postorder == null || postorder.length == 0) {
return null;
}
// 在前序排列中,从头开始查找定位: 第一个既在后序也在中序的元素位置,以及它在后序中的位置
int start = -1, pindex = -1;// start是后序中的位置 index是中序的位置
for (int i = postorder.length - 1; i >= 0; i--) {
int tmp = search(inorder, postorder[i]);
if (tmp >= 0) {
pindex = tmp;
start = i;
break;
}
} // ====end
TreeNode root = new TreeNode(postorder[start]);
if (inorder.length == 1) {
return root;
}
// 根据index划分中序排列
int leftInorder[] = Arrays.copyOfRange(inorder, 0, pindex);
int rightInorder[] = Arrays.copyOfRange(inorder, pindex + 1, inorder.length);
int newpreorder[] = Arrays.copyOfRange(postorder, 0, start);
root.left = buildTree(leftInorder, newpreorder);
root.right = buildTree(rightInorder, newpreorder);
return root;
}
public int search(int nums[], int target) {
for (int i = 0; i < nums.length; i++) {
if (nums[i] == target)
return i;
}
return -1;
}
相关文章推荐
- caffe学习笔记(8):Net Surgery
- 【Leetcode】Construct Binary Tree from Preorder and Inorder Traversal
- 第108课: Spark Streaming电商广告点击综合案例动态黑名单过滤真正的实现代码
- vi命令_Linux vi 命令用法详解:功能强大的纯文本编辑器
- JAVA设计模式之单例模式
- 安卓实战中防止Button的频繁点击多次执行点击事件和点击切换文字
- Kotlin笔记
- 编码规范-注释管理
- Educational Codeforces Round 11 D. Number of Parallelograms
- 动态规划专题总结
- 【算法相关】高频词汇统计系统(二)
- 满二叉树、完全二叉树、平衡二叉树、哈夫曼树
- 数据库的锁机制
- 动态规划——problem g
- js中的forEach
- js中的forEach
- R语言-创建数据集
- Android PowerManagerService和PowerManager 源码分析
- k8s 部署
- 周易六十四卦——大畜卦