LeetCode Construct Binary Tree from Preorder and Inorder Traversal
2015-07-06 15:38
471 查看
Description:
Given preorder and inorder traversal of a tree, construct the binary tree.
Solution:
基本思路是,前序的第一个是当前子树的根节点,那么在中序遍历的节点中遍历一遍,找到对应根节点的下标。
然后根据这个下标,减去这个子树开始节点的下标len,就知道了len个在根节点的左子树,其余在右子树。
这里有一个注意的点,就是len长度的节点,在前序和中序当中是一样的。
前序是(根节点)(len个左子树)(右子树)
中序是(len个左子树)(根节点)(右子树)
Given preorder and inorder traversal of a tree, construct the binary tree.
Solution:
基本思路是,前序的第一个是当前子树的根节点,那么在中序遍历的节点中遍历一遍,找到对应根节点的下标。
然后根据这个下标,减去这个子树开始节点的下标len,就知道了len个在根节点的左子树,其余在右子树。
这里有一个注意的点,就是len长度的节点,在前序和中序当中是一样的。
前序是(根节点)(len个左子树)(右子树)
中序是(len个左子树)(根节点)(右子树)
import java.util.*; public class Solution { int[] preorder; int[] inorder; int n; public TreeNode buildTree(int[] preorder, int[] inorder) { this.preorder = preorder; this.inorder = inorder; this.n = preorder.length; return dfs(0, n - 1, 0, n - 1); } TreeNode dfs(int preStart, int preEnd, int inStart, int inEnd) { if (preStart >= n || preEnd < 0 || inStart >= n || inEnd < 0 || preStart > preEnd) return null; int len, inMiddle = inEnd; for (int i = inStart; i <= inEnd; i++) { if (inorder[i] == preorder[preStart]) { inMiddle = i; break; } } len = inMiddle - inStart; TreeNode root = new TreeNode(preorder[preStart]); System.out.println(root); root.left = dfs(preStart + 1, preStart + len, inStart, inMiddle - 1); root.right = dfs(preStart + 1 + len, preEnd, inMiddle + 1, inEnd); return root; } public static void main(String[] args) { Solution s = new Solution(); s.buildTree(new int[] { 1, 2 }, new int[] { 1, 2 }); } }
相关文章推荐
- C语言几种经典排序代码
- mysql grant ,User,revoke
- 百度百科之百科全书
- 布尔运算-二维
- 呼叫中心的优化经历
- 学习笔记八:试图利用C++ Primer 13.5节内容分析shared_ptr指针(共享智能指针)
- linux sar命令详解
- Android源码分析--CircleImageView 源码详解
- MFC 中 删除一个非空文件夹
- (译).NET4.X并行任务Task需要释放吗?
- 用PyInstaller把Python代码打包成单个独立的exe可执行文件
- 前端 - png24格式图片转换为png8图片
- 设计模式(0): 简介及SOLID原则
- cordova-android源代码分析
- Android 开源项目android-open-project解析之(三) ScrollView,TimeView,TipView,FlipView
- C++静态成员小结
- iOS运行时runtime初探(强制获取并修改私有变量,强制增加及修改私有方法等)
- 天气效果中使用多种设计模式示例
- For this reason every person covers low-cost diesel powered timepieces today
- B树