重建二叉树
来源:互联网 发布:淘宝互联网生态系统 编辑:程序博客网 时间:2024/06/06 06:35
根据前序和中序,或者中序和后序,重建二叉树,递归法:
public TreeNode buildTreeFromPreAndIn(int[] preorder, int[] inorder) { return buildTreeFromPreAndIn(preorder, 0, preorder.length, inorder, 0, inorder.length); } private TreeNode buildTreeFromPreAndIn(int[] preorder, int from1, int to1, int[] inorder, int from2, int to2) { if (from1 == to1) { return null; } int val = preorder[from1]; TreeNode root = new TreeNode(val); int leftSize = 0; for (int i = from2; i < to2; i++) { if (inorder[i] == val) { break; } leftSize++; } root.left = buildTreeFromPreAndIn(preorder, from1 + 1, from1 + 1 + leftSize, inorder, from2, from2 + leftSize); root.right = buildTreeFromPreAndIn(preorder, from1 + 1 + leftSize, to1, inorder, from2 + 1 + leftSize, to2); return root; } public TreeNode buildTreeFromInAndPost(int[] inorder, int[] postorder) { return buildTreeFromInAndPost(inorder, 0, inorder.length, postorder, 0, postorder.length); } private TreeNode buildTreeFromInAndPost(int[] inorder, int from1, int to1, int[] postorder, int from2, int to2) { if (from1 == to1) { return null; } int val = postorder[to2 - 1]; TreeNode root = new TreeNode(val); int leftSize = 0; for (int i = from1; i < to1; i++) { if (inorder[i] == val) { break; } leftSize++; } root.left = buildTreeFromInAndPost(inorder, from1, from1 + leftSize, postorder, from2, from2 + leftSize); root.right = buildTreeFromInAndPost(inorder, from1 + 1 + leftSize, to1, postorder, from2 + leftSize, to2 - 1); return root; }
0 0
- 3.9重建二叉树
- 重建二叉树
- 二叉树重建
- 二叉树重建
- 二叉树的重建
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 二叉树重建
- 二叉树重建
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 字符串专题
- PHP CURD实现的中$_GET和$_POST用法的小问题
- sort与qsort
- 基于混沌遗传算法的无人机路径规划
- Error inflating class com.facebook.drawee.view.SimpleDraweeView问题的解决
- 重建二叉树
- codeforces 631C Report(单调栈)
- linux 分区格式化挂载 物理卷 逻辑卷
- HDOJ 5750 Dertouzos
- Java多线程研究02-对象锁,synchronized关键字详解
- Scala 类和对象
- C++矩阵类(乘法与快速幂)
- 设计模式---行为类型---观察者
- (HDU 5727)2016 Multi-University Training Contest 1 Necklace(搜索、图论)