Tree-----重建树(根据中序和前序,中序和后序)
来源:互联网 发布:uv胶多少钱淘宝 编辑:程序博客网 时间:2024/06/04 14:04
1.根据中序和前序
原题目
public class Solution { public TreeNode buildTree(int[] preorder, int[] inorder) { if (preorder == null || preorder.length == 0 || inorder == null || inorder.length == 0) { return null; } return build(preorder, 0, preorder.length - 1, inorder, 0, inorder.length - 1); } public TreeNode build(int[] preorder, int leftP, int rightP, int[] inorder, int leftI, int rightI) { if (leftP > rightP || leftI > rightI) { return null; } TreeNode root = new TreeNode(preorder[leftP]); int indexInInOrder = findRootIndexInOrder(inorder, leftI, rightI, root.val); int offset = indexInInOrder - leftI - 1; TreeNode left = build(preorder, leftP + 1, leftP + 1 + offset, inorder, leftI, indexInInOrder - 1); TreeNode right = build(preorder, leftP + offset + 2, rightP, inorder, indexInInOrder + 1, rightI); root.left = left; root.right = right; return root; } public int findRootIndexInOrder(int[] inorder, int left, int right, int target) { int result = 0; for (int i = left; i <= right; i++) { if (inorder[i] == target) { result = i; break; } } return result; }}
offset很重要,一步到位
2.根据中序和后序
public class Solution { public TreeNode buildTree(int[] inorder, int[] postorder) { if (inorder == null || inorder.length == 0 || postorder == null || postorder.length == 0) { return null; } return build(inorder, 0, inorder.length - 1, postorder, 0, postorder.length - 1); } public TreeNode build(int[] inorder, int leftI, int rightI, int[] postorder, int leftP, int rightP) { if (leftI > rightI || leftP > rightP) { return null; } TreeNode root = new TreeNode(postorder[rightP]); int indexInInOrder = findRootIndexInOrder(inorder, leftI, rightI, root.val); int offset = indexInInOrder - 1 - leftI; TreeNode left = build(inorder, leftI, indexInInOrder - 1, postorder, leftP, leftP + offset); TreeNode right = build(inorder, indexInInOrder + 1, rightI, postorder, leftP + offset + 1, rightP - 1); root.left = left; root.right = right; return root; } public int findRootIndexInOrder(int[] inorder, int left, int right, int target) { int result = 0; for (int i = left; i <= right; i++) { if (inorder[i] == target) { result = i; break; } } return result; }}
0 0
- Tree-----重建树(根据中序和前序,中序和后序)
- 根据后序和中序建树
- 根据中序、前序(后序)输出树的后序(前序),不重建树
- UVa 548 Tree 根据后序遍历和中序遍历建树后DFS
- 根据二叉树的前序和中序建树
- 通过前序和中序遍历数组重建树
- 前序遍历和中序遍历 重建树
- leetCode_根据前序、中序建树以及根据中序、后序建树
- 前序和中序建树,后序和中序建树
- 【LeetCode】根据前序和中序遍历建树 && 根据中序遍历和后续遍历建树
- 二叉树 根据前序遍历和中序遍历 或者 后序遍历和中序遍历建树
- 通过前序和后序遍历数组重建树
- 二叉树——根据先序(后序)和中序遍历建树
- 已知中序和后序建树
- 7-9 还原二叉树(25 point(s))(根据前序遍历和中序遍历建树)
- 根据前序与中序遍历建树后以后序遍历输出
- 重构二叉树(根据前序和中序)
- 根据前序遍历和中序遍历,后序遍历和中序遍历重构二叉树
- 读书笔记-《深入理解Java虚拟机》-JVM内存模型
- Ancient Go UESTC
- CSS3 多列
- 导出项目war包(Eclipse)
- 1100. Mars Numbers 解析
- Tree-----重建树(根据中序和前序,中序和后序)
- 详述 MySQL 数据库的安装及配置
- ART世界探险-arm64-v8a 64位CPU的架构快餐教程
- arm-none-linux-gnueabi-gcc下载
- 中超赛程分析(6)--“蛇形排阵”评价指标
- jQuery中的几个案例:隔行变色、复选框全选和全不选
- c++链接时,无法解析的外部符号 _GdipAlloc等一系列报错
- int转换成String
- 1101. Quick Sort 解析