剑指Offer [04] 重建二叉树
来源:互联网 发布:手机淘宝怎么复制宝贝 编辑:程序博客网 时间:2024/05/19 00:36
重建二叉树 : 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列 {1,2,4,7,3,5,6,8} 和中序遍历序列 {4,7,2,1,5,3,8,6},则重建二叉树并返回。
思路:
前序遍历的第一个点一定是根节点
中序遍历中,根节点左边为其左子树,右边为其右子树
注意点:
- 递归调用过程中函数的参数值,应该多举例验证下是否正确
package A04重建二叉树;public class Solution { public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } public TreeNode reConstructBinaryTree(int[] pre, int[] in) { TreeNode root = cal(pre, 0, pre.length-1, in, 0, in.length-11); return root; } public TreeNode cal(int[] pre,int preStart,int preEnd,int[] in,int inStart,int inEnd){ // 循环终止条件 if (preStart > preEnd || inStart > inEnd) { return null; } // 此时的根节点 TreeNode root = new TreeNode(pre[preStart]); for(int i=inStart;i<=inEnd;i++){ // 找到根节点在中序遍历中的索引 if (pre[preStart] == in[i]) { // 左孩子,在前序遍历中,起点将比根节点索引大 1 ,终点将是 i 的偏移位数 - 1 root.left = cal(pre, preStart+1, preStart+i-inStart, in, inStart, i-1); root.right = cal(pre, i-inStart+preStart+1, preEnd, in, i+1, inEnd); } } return root; }}
阅读全文
0 0
- 《剑指Offer》读书笔记04:重建二叉树
- 《剑指offer》-04重建二叉树
- 剑指Offer [04] 重建二叉树
- 牛客网-剑指offer-04-重建二叉树
- [剑指offer]重建二叉树
- 【剑指offer】重建二叉树
- 剑指offer--重建二叉树
- 剑指offer---重建二叉树
- 剑指Offer-重建二叉树
- 剑指offer:重建二叉树
- 剑指offer-重建二叉树
- 《剑指offer》重建二叉树
- 【剑指Offer】重建二叉树
- 剑指offer-重建二叉树
- 《剑指offer》-重建二叉树
- 剑指offer 重建二叉树
- 剑指offer:重建二叉树
- 【剑指offer】重建二叉树
- HDU 6127 Hard challenge
- 01背包滚动数组逆序枚举背包容量V的原因
- caffe-图片转为lmdb数据集
- 欢迎使用CSDN-markdown编辑器
- 密码学实践-读书笔记一二三
- 剑指Offer [04] 重建二叉树
- Git命令详解
- 关于Java中面向对象章节、IO 流中的重点基础知识。
- DNA Consensus String UVA
- gfoj_704 数组操作
- python的几种数据结构
- module 'cv2' has no attribute 'CV_LOAD_IMAGE_GRAYSCALE'
- canvas学习小记
- DAY64 Django基础1