重建二叉树
来源:互联网 发布:淘宝办签证泄露信息 编辑:程序博客网 时间:2024/05/02 02:39
给定一棵二叉树,假设每个节点都用唯一的字符来表示。
假设已经有了前序遍历和中序遍历的结果,希望通过一个算法重建这棵树。
前序遍历结果:a b d c e f
中序遍历结果:d b a e c f
/* * 根据前序和中序遍历重建二叉树,并输出后序遍历 */public class RebuildBinaryTree { public static void main(String[] args) { char[] preOrder = { 'a', 'b', 'd', 'c', 'e', 'f' }; char[] inOrder = { 'd', 'b', 'a', 'e', 'c', 'f' }; RebuildBinaryTree rebulid = new RebuildBinaryTree(); Node root = rebulid.rebuildBinaryTree(preOrder, 0, preOrder.length - 1, inOrder, 0, inOrder.length - 1); rebulid.postOrder(root); } private Node rebuildBinaryTree(char[] pre, int begin1, int end1, char[] in, int begin2, int end2) { if (begin1 > end1 || begin2 > end2) return null; char rootData = pre[begin1]; Node head = new Node(rootData); int divider = findIndexInArray(in, rootData, begin2, end2); int offset = divider - begin2 - 1; head.left = rebuildBinaryTree(pre, begin1 + 1, begin1 + 1 + offset, in, begin2, begin2 + offset); head.right = rebuildBinaryTree(pre, begin1 + 2 + offset, end1, in, divider + 1, end2); return head; } private int findIndexInArray(char[] a, char x, int begin, int end) { for (int i = begin; i <= end; i++) { if (a[i] == x) return i; } return -1; } private void postOrder(Node root) { if (root.left != null) { postOrder(root.left); } if (root.right != null) { postOrder(root.right); } System.out.print(root.value); } class Node { char value; Node left; Node right; public Node(char value) { this.value = value; } public int getValue() { return value; } public void setValue(char value) { this.value = value; } public Node getLeft() { return left; } public void setLeft(Node left) { this.left = left; } public Node getRight() { return right; } public void setRight(Node right) { this.right = right; } }}
0 0
- 3.9重建二叉树
- 重建二叉树
- 二叉树重建
- 二叉树重建
- 二叉树的重建
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 重建二叉树
- 二叉树重建
- 二叉树重建
- 重建二叉树
- 重建二叉树
- 重建二叉树
- MYSQL基础_聚合函数_分组和多表连接查询
- Ajax局部刷新
- 关于Android使用proguard进行代码混淆
- Html 中 <a>标签的target属性
- android pull 解析xml
- 重建二叉树
- Shell多线程操作及线程数控制实例
- 随诊医生1---启动流程分析
- 四种强制类型转换的总结(const_cast、static_cast、dynamic_cast、reinterpreter_cast)
- 生成窗口最大数组问题
- 开源的 JVM 应用部署工具
- ajax上传文件 jqueryFileUpload
- 程序员 为什么千万不要重写代码
- Matlab 图像灰度变换