剑指offer题四

来源:互联网 发布:比邻软件 编辑:程序博客网 时间:2024/06/04 16:04
package jianzhioffer;import java.util.Arrays;import java.util.Scanner;class TreeNode{int val;boolean isVisted = false;TreeNode left;TreeNode right;TreeNode(int x){val = x;}}public class BinaryTree {/* * 由前序和中序序列重新构建二叉树*/public static TreeNode reConstructBinaryTree(int [] pre,int [] in){if(pre.length == 0 || in.length == 0){return null;}TreeNode node = new TreeNode(pre[0]);for(int i = 0;i<in.length;i++){if(in[i] == pre[0]){node.left = reConstructBinaryTree(Arrays.copyOfRange(pre, 1, i+1),Arrays.copyOfRange(in, 0, i));node.right = reConstructBinaryTree(Arrays.copyOfRange(pre,i+1, pre.length),Arrays.copyOfRange(in, i+1, in.length));}}return node;}//输出某个节点public void visted(TreeNode subTree){subTree.isVisted = true;System.out.println("val:" + subTree.val);}//前序遍历public void preOrder(TreeNode subTree){if(subTree != null){visted(subTree);preOrder(subTree.left);preOrder(subTree.right);}}//中序遍历public void inOrder(TreeNode subTree){if(subTree != null){inOrder(subTree.left);visted(subTree);inOrder(subTree.right);}}//后序遍历public void postOrder(TreeNode subTree){if(subTree != null){postOrder(subTree.left);postOrder(subTree.right);visted(subTree);}}public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int [] pre = new int[n];int [] in = new int[n];for(int i = 0;i<n;i++){pre[i] = sc.nextInt();}for(int i = 0;i<n;i++){in[i] = sc.nextInt();}//得到构建好的二叉树TreeNode TN = reConstructBinaryTree(pre,in);//前中后序遍历BinaryTree bt = new BinaryTree();TreeNode root = new TreeNode(pre[0]);System.out.println("前序遍历结果:");bt.preOrder(root);System.out.println("中序遍历结果:");bt.inOrder(root);System.out.println("后序遍历结果:");bt.postOrder(root);}}

原创粉丝点击