大鹏一日同风起

大鹏一日同风起
记录日常,记录生活,记录时代
  1. 首页
  2. 算法
  3. 正文

已知先序及中序遍历,重建二叉树

2015年12月2日 44点热度 0人点赞 0条评论
package cn.pbdata.util;

public class PreMidToAfter {

    public class TreeNode{
        int val;
        TreeNode left;
        TreeNode right;
        public TreeNode(){
            left = null;
            right = null;
        }
    }
    
    public TreeNode rebuild(int[] pre,int[] mid){
        return rebuild(pre,0,pre.length-1,mid,0,mid.length-1);
    }
    
    public TreeNode rebuild(int[] pre,int ps,int pe,int[] mid,int ms,int me){
        if(pre == null || pre.length == 0 || mid == null || mid.length==0){
            return null;
        }
        if(ps > pe){
            return null;
        }
        int val = pre[ps];
        TreeNode root = new TreeNode();
        root.val = val;
        
        int index;
        for(index = ms ; index <= me;index++){
            if(val == mid[index]){
                break;
            }
        }
        
        int leftPreStart = ps + 1;
        int leftPreEnd = ps + index - ms;
        int leftMidStart = ms;
        int leftMidEnd = index - 1;
        
        root.left = rebuild(pre,leftPreStart,leftPreEnd,mid,leftMidStart,leftMidEnd);
        
        int rightPreStart = ps + index -ms + 1;
        int rightPreEnd  = pe;
        int rightMidStart = index + 1;
        int rightMidEnd = me;
        root.right = rebuild(pre,rightPreStart,rightPreEnd,mid,rightMidStart,rightMidEnd);
        return root;
    }
    public void preView(TreeNode root){
        if(root == null){
            return;
        }
        System.out.print(root.val);
        preView(root.left);
        preView(root.right);
    }
    public void midView(TreeNode root){
        if(root == null){
            return;
        }
        midView(root.left);
        System.out.print(root.val);
        midView(root.right);
    }
    public void lastView(TreeNode root){
        if(root == null){
            return;
        }
        lastView(root.left);
        lastView(root.right);
        System.out.print(root.val);
    }
    
    
    public static void main(String[] args){
        PreMidToAfter pt = new PreMidToAfter();
        int[] pre = { 1, 2, 4,7,3,5,6,8};
        int[] mid = {4,7,2,1,5,3,8,6};
        TreeNode node1 = pt.rebuild(pre, mid);
        pt.preView(node1); 
        System.out.println("");
        pt.midView(node1);
        System.out.println("");
        pt.lastView(node1);
        System.out.println("");
        
    }
}
标签: 暂无
最后更新:2015年12月2日

pbdatacn

这个人很懒,什么都没留下

点赞
< 上一篇

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

归档

  • 2023 年 1 月
  • 2022 年 12 月
  • 2022 年 9 月
  • 2022 年 8 月
  • 2017 年 10 月
  • 2017 年 9 月
  • 2015 年 12 月
  • 2015 年 11 月
  • 2015 年 10 月
  • 2015 年 9 月
  • 2015 年 8 月
  • 2015 年 3 月
  • 2015 年 1 月
  • 2014 年 12 月
  • 2014 年 10 月
  • 2014 年 9 月
  • 2014 年 8 月
  • 2014 年 7 月

分类

  • Android
  • Docker
  • hadoop
  • linux
  • Redis
  • webservice
  • 文章
  • 未分类
  • 生活
  • 算法

COPYRIGHT © 2026 大鹏一日同风起. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

京ICP备14029030号-1