根据前序遍历和中序遍历重建二叉树的Java实现
2010-12-13 22:43
561 查看
package cn.feng; class Node { Node left = null; Node right = null; char value; } public class BinaryTreeBuilder { /** * 根据前序遍历和中序遍历重建二叉树子树 * @param preOrder 前序遍历数组 * @param start 子树起始位置 * @param inOrder 中序遍历数组 * @param end 中序遍历结束位置 * @param length 子树节点树 * @return 子树的根节点 */ public static Node buildTree(char[] preOrder, int start, char[] inOrder, int end, int length) { //参数验证 if (preOrder == null || preOrder.length == 0 || inOrder == null || inOrder.length == 0 || length <= 0) { return null; } //建立子树根节点 char value = preOrder[start]; Node root = new Node(); root.value = value; //递归终止条件:子树只有一个节点 if (length == 1) return root; //分拆子树的左子树和右子树 int i = 0; while (i < length) { if (value == inOrder[end - i]) { break; } i++; } //建立子树的左子树 root.left = buildTree(preOrder, start + 1, inOrder, end - i - 1, length - 1 - i); //建立子树的右子树 root.right = buildTree(preOrder, start + length - i, inOrder, end, i ); return root; } public static void main(String[] args) { char[] preOrder = new char[] {'a', 'b', 'd', 'c', 'e', 'f'}; char[] inOrder = new char[] {'d', 'b', 'a', 'e', 'c', 'f'}; Node root = buildTree(preOrder, 0, inOrder, inOrder.length - 1, inOrder.length); } }
相关文章推荐
- 一直二叉树的前序遍历和中序遍历的结果,重建该二叉树 Java代码实现
- 通过前序遍历和中序遍历重建二叉树以及输出后序遍历(Java实现)(二)
- 通过前序遍历和中序遍历重建二叉树以及输出后序遍历(Java实现)
- 根据先序和中序遍历重建二叉树java实现
- java实现根据前序遍历构建二叉树(前序遍历、中序遍历、后序遍历)
- 根据二叉树的前序遍历和中序遍历重建二叉树
- 根据前序遍历和中序遍历重建二叉树
- 根据前序遍历和中序遍历重建二叉树
- 根据二叉树前序遍历和中序遍历的结果,重建出该二叉树并后序遍历之 java代码
- 剑指Offer_06 根据前序遍历和中序遍历序列 重建二叉树
- 027根据前序遍历和中序遍历,重建二叉树(keep it up)
- 根据二叉树的前序遍历和中序遍历的结果重建出该二叉树
- POJ 2255Tree Recovery 二叉树重建(根据前序遍历和中序遍历写出后序遍历)
- 由前序遍历和中序遍历重建二叉树和C语言模式实现C++继承和多态——题集(十四)
- 根据前序遍历序列和中序遍历序列重建二叉树
- 数据结构--java实现二叉树的先序、中序、后序、层次遍历及根据先序中序建立二叉树
- 剑指offer刷题之c++实现的根据二叉树的前序和中序遍历重建二叉树
- 由前序遍历和中序遍历重建二叉树,再实现后续遍历
- Java实现——根据先序遍历和中序遍历,确定二叉树
- java 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。