Construct Binary Tree from Preorder and Inorder Traversal-先序和中序构造树
来源:互联网 发布:综合性数据库 编辑:程序博客网 时间:2024/06/05 04:35
- 问题描述:Given preorder and inorder traversal of a tree, construct the binary tree.还有个是中序和后序。其实两个题本质是一样的。
- 问题分析:暂时只想到递归的方法来解题,可是看到耗时似乎蛮高的,不知道还有什么更搞笑的解法。
这个思路没什么好讲的,通过先序或者后序找出根节点,然后将中序的序列分开,这样就可以 找出左子树和右子树,然后对左子树和右子树继续用递归即可搞定。代码如下: <span style="font-family:Microsoft YaHei;">/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution { public TreeNode buildTree(int[] preorder, int[] inorder) { if(preorder == null ||inorder == null || preorder.length == 0 || preorder.length != inorder.length) return null; return buildTree(preorder,inorder, 0,preorder.length-1, 0, inorder.length-1); } public TreeNode buildTree(int[] preorder, int[] inorder, int i, int j, int k, int l){ if(i == j) return new TreeNode(preorder[i]); int index = k; for(; index <=l && preorder[i] != inorder[index]; index++); // for(int idx = k+1; idx <= l; idx++) // if(preorder[i] == inorder[idx]){ // index = idx; // break; // } TreeNode root = new TreeNode(preorder[i]); if(index > k) root.left = buildTree(preorder, inorder, i+1, i + index-k, k, index -1); if(index < l) root.right = buildTree(preorder, inorder, i+index-k + 1, j, index +1, l); return root; }}</span>
<span style="font-family:Microsoft YaHei;">/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution { public TreeNode buildTree(int[] preorder, int[] inorder) { if(preorder == null ||inorder == null || preorder.length == 0 || preorder.length != inorder.length) return null; return buildTree(preorder,inorder, 0,preorder.length-1, 0, inorder.length-1); } public TreeNode buildTree(int[] preorder, int[] inorder, int i, int j, int k, int l){ if(i == j) return new TreeNode(preorder[i]); int index = k; for(; index <=l && preorder[i] != inorder[index]; index++); // for(int idx = k+1; idx <= l; idx++) // if(preorder[i] == inorder[idx]){ // index = idx; // break; // } TreeNode root = new TreeNode(preorder[i]); if(index > k) root.left = buildTree(preorder, inorder, i+1, i + index-k, k, index -1); if(index < l) root.right = buildTree(preorder, inorder, i+index-k + 1, j, index +1, l); return root; }}</span>
0 0
- Construct Binary Tree from Preorder and Inorder Traversal-先序和中序构造树
- 105.leetcode Construct Binary Tree from Preorder and Inorder Traversal(medium)[先序、中序构造二叉树]
- Construct Binary Tree from Preorder and Inorder Traversal 根据先序和中序序列生成二叉树(重重)
- 【LeetCode】Construct Binary Tree from Preorder and Inorder Traversal 根据先序序列和中序序列恢复二叉树
- [LintCode] 前序遍历和中序遍历树构造二叉树 Construct Binary Tree from Preorder and Inorder Traversal
- Construct Binary Tree from Preorder and Inorder Traversal 根据前序遍历和中序遍历构造二叉树
- 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 (利用先序和中序遍历构建二叉树) -- medium
- 105. Construct Binary Tree from Preorder and Inorder Traversal,前序+中序 构建 树
- LeetCode OJ 之 Construct Binary Tree from Preorder and Inorder Traversal (由二叉树的前序和中序序列构造二叉树)
- 73.Construct Binary Tree from Preorder and Inorder Traversal-前序遍历和中序遍历树构造二叉树(中等题)
- 根据前序和中序序列重建二叉树 Construct Binary Tree from Preorder and Inorder Traversal
- Construct Binary Tree from Preorder and Inorder Traversal 从先序和中序重建二叉树@LeetCode
- 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(从前序遍历和中序遍历构造二叉树)
- LeetCode105--Tree--Construct Binary Tree from Preorder and Inorder Traversal--根据前序遍历+中序遍历构建树
- From Core Java Volume Ⅰ(1)
- 操作系统知识(6)--Shell初探
- 下载及编译Android6.0异常解决
- C#中CLR(公共语言运行时)与IL(中间代码)
- 无线学习笔记
- Construct Binary Tree from Preorder and Inorder Traversal-先序和中序构造树
- C# DevExpress TreeList指定KeyFieldName后无法显示该列的问题
- 安装 RabbitMQ
- CAFFE--常见错误分析
- 软中断和硬中断的区别
- EasyUI tree-grid 数回显问题实现探讨
- 用友致远A8-V5协同管理软件 V5.1用户操作手册(企业版)
- 疯狂android讲义(第三版)总结之 2.11 使用活动条ActionBar
- Web开发浅谈框架