zoukankan      html  css  js  c++  java
  • 06:重建二叉树

    import java.util.Arrays;
    
    /**
     * 面试题6:重建二叉树
     * 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
     * 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
     */
    public class _06_binaryTree {
        public static void main(String[] args){
            int[] pre={1,2,4,7,3,5,6,8};
            int[] mid={4,7,2,1,5,3,8,6};
            /*int[] pre={1};
            int[] mid={1};*/
    
            Solution06 solution06 = new Solution06();
            TreeNode treeNode=solution06.reConstructBinaryTree(pre,mid);
            solution06.preOrderTraversal(treeNode);
            System.out.println();
            solution06.inOrderTraversal(treeNode);
        }
    }
    class Solution06 {
        /*public TreeNode reConstructBinaryTree(int[] pre,int[] in) {
            if(pre==null||in==null||pre.length==0||in.length==0){
                return null;
            }
            TreeNode treeNode = new TreeNode(pre[0]);
            for(int i=0;i<in.length;i++){
                if(pre[0]==in[i]){
                    treeNode.left= reConstructBinaryTree(Arrays.copyOfRange(pre,1,i+1),Arrays.copyOfRange(in,0,i)); //截取数组左开右毕区间[...)
                    treeNode.right= reConstructBinaryTree(Arrays.copyOfRange(pre,i+1,pre.length),Arrays.copyOfRange(in,i+1,in.length));
                }
            }
            return treeNode;
        }*/
        public TreeNode reConstructBinaryTree(int[] pre,int[] in) {
            if(pre==null||in==null){
                return null;
            }
            return createTree(pre,0,pre.length-1,in,0,in.length-1);
        }
        public TreeNode createTree(int[] pre,int preStart,int preEnd,int[] in,int inStart,int inEnd){
            if(preStart>preEnd||inStart>inEnd){
                return null;
            }
            TreeNode treeNode = new TreeNode(pre[preStart]);
            for(int i=inStart;i<=inEnd;i++){
                if(pre[preStart]==in[i]){
                    treeNode.left= createTree(pre,preStart+1,preStart+(i-inStart),in,inStart,i-1);
                    treeNode.right= createTree(pre,preStart+1+(i-inStart),preEnd,in,i+1,inEnd);
                }
            }
            return treeNode;
        }
        /**
         * 先序遍历
         * @param node 二叉树的根节点
         */
        public void preOrderTraversal(TreeNode node){
            if(node!=null){
                System.out.print(node.value+"、");
                preOrderTraversal(node.left);
                preOrderTraversal(node.right);
            }
        }
        /**
         * 中序遍历
         * @param node 二叉树的根节点
         */
        public void inOrderTraversal(TreeNode node){
            if(node!=null){
                inOrderTraversal(node.left);
                System.out.print(node.value+"、");
                inOrderTraversal(node.right);
            }
        }
    }
    class TreeNode {
        int value;
        TreeNode left;
        TreeNode right;
        TreeNode(int value) {
            this.value = value;
        }
    }
    
  • 相关阅读:
    RESTful API入门
    $.ajax()参数详解及标准写法(转)
    Jquery 页面首次加载方式
    jQuery操作单选按钮(radio)用法
    GridView的 OnRowDataBound 事件用法
    ASP.NET文件上传大小的限制解决方案
    jQuery经典学习笔记
    Thermal management in a gaming machine
    iis7配置网站容易出现的问题(转)
    你能熟练使用Dictionary字典和List列表吗?(转)
  • 原文地址:https://www.cnblogs.com/andy-zhou/p/6532536.html
Copyright © 2011-2022 走看看