重建二叉树

来源:互联网 发布:db2和oracle的sql区别 编辑:程序博客网 时间:2024/06/02 04:57

题目描述

  • 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

Java Code

public class RebuildTree {    public static void main(String[] args)    {        int[] pre = {1,2,4,7,3,5,6,8};        int[] in = {4,7,2,1,5,3,8,6};        TreeNode root = SolutionOne.reConstructBinaryTree(pre,in);        SolutionOne.Traverse(root);        System.out.println();    }}class SolutionOne{    public static TreeNode reConstructBinaryTree(int [] pre,int [] in)    {        return reBuildBinaryTree(pre,in,0,pre.length-1,0,in.length-1);    }    public static TreeNode reBuildBinaryTree(int[] pre,int [] in,int preLeft,int preRight,int inLeft,int inRight)    {        if(preLeft > preRight || inLeft > inRight) return null;        TreeNode root = new TreeNode(pre[preLeft]);        for(int pos = inLeft; pos<= inRight; pos++)        {            if(in[pos] == root.val){                root.left = reBuildBinaryTree(pre,in,preLeft+1,preLeft+pos-inLeft,inLeft,pos-1);                root.right = reBuildBinaryTree(pre,in,preLeft+pos+1-inLeft,preRight,pos+1,inRight);            }        }        return root;}    public static void Traverse(TreeNode root)    {        if(root == null) return;        Traverse(root.left);        System.out.print(root.val + " ");        Traverse(root.right);    }}class TreeNode {    int val;    TreeNode left;    TreeNode right;    TreeNode(int x){        val = x;    }}
  • 注意要注意代码中pos表示的含义,之前一直没有成功是因为将preLeft+pos-inLeft写成了preLeft+pos,并没有减去inLeft
0 0
原创粉丝点击