码迷,mamicode.com
首页 > 编程语言 > 详细

Pro 6 重建二叉树(java)

时间:2015-04-05 21:49:10      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:

注:(1)java中树的构建

(2)构建子树时可以直接利用Arrays.copyOfRange(preorder, from, to),这个方法是左开右闭的

 1 package com.xsf.SordForOffer;
 2 
 3 import java.util.Arrays;
 4 
 5 /*剑指offer第6个问题
 6  根据前序和中序遍历来重建二叉树
 7  */
 8 class BinaryTreeNode {
 9     public int value;
10     public BinaryTreeNode leftNode;
11     public BinaryTreeNode rightNode;
12 }
13 
14 class ConstructCore {
15     /*
16      * 输入二叉树的前序遍历和中序遍历结果,重建二叉树并输出头节点 ex:12473568,47215386
17      */
18     public BinaryTreeNode constructCore(int[] preorder, int[] inorder)
19             throws Exception {
20         
21         if (preorder == null || inorder == null) {
22             return null;
23         }
24         if (preorder.length != inorder.length) {
25             throw new Exception("长度不一样-非法输入");
26         }
27         BinaryTreeNode root = new BinaryTreeNode();
28         for (int i = 0; i < inorder.length; i++) {
29             if (inorder[i] == preorder[0]) {
30                 // isHave = true;
31                 root.value = inorder[i];
32                 root.leftNode = constructCore(
33                         Arrays.copyOfRange(preorder, 1, i + 1),
34                         Arrays.copyOfRange(inorder, 0, i));
35                 root.rightNode = constructCore(
36                         Arrays.copyOfRange(preorder, i + 1, preorder.length),
37                         Arrays.copyOfRange(inorder, i + 1, inorder.length));
38             }
39         }
40         
41         return root;
42     }
43 
44     public void lastOrderTraverse(BinaryTreeNode T) {
45         if (T != null) {
46             lastOrderTraverse(T.leftNode);
47             lastOrderTraverse(T.rightNode);
48             System.out.print(T.value);
49         }
50     }
51 }
52 
53 public class Pro6Biconstruct {
54     public static void main(String[] args) throws Exception {
55         ConstructCore test = new ConstructCore();
56         int[] pre = { 1, 2, 4 };
57         int[] in = { 2, 1, 4 };
58         BinaryTreeNode root = test.constructCore(pre, in);
59         test.lastOrderTraverse(root);
60     }
61 }

 

Pro 6 重建二叉树(java)

标签:

原文地址:http://www.cnblogs.com/xsfelvis/p/4394684.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!