• 剑指offer系列——4.重建二叉树——前序中序确定树/中序后序确定树


    Q:给出一棵树的前序遍历和中序遍历,请构造这颗二叉树
    注意:
    可以假设树中不存在重复的节点
    A:

        public TreeNode buildTree(int[] preorder, int[] inorder) {
            int prelen=preorder.length;
            int inlen=inorder.length;
            return BT(preorder,0,prelen-1,inorder,0,inlen-1);
        }
        TreeNode BT(int[] preorder,int prestart,int preend,int[] inorder,int instart,int inend)
        {
            if(instart>inend)
                return null;
            TreeNode root=new TreeNode(preorder[prestart]);
            int mid=0;
            for(mid=instart;mid<=inend;mid++)
                if(inorder[mid]==root.val)
                    break;
            int leftlen=mid-instart;
            root.left=BT(preorder,prestart+1,prestart+leftlen,inorder,instart,mid-1);
            root.right=BT(preorder,prestart+leftlen+1,preend,inorder,mid+1,inend);
            return root;
        }
    

    Q:给出一棵树的中序遍历和后序遍历,请构造这颗二叉树
    注意:
    保证给出的树中不存在重复的节点
    A:

        public TreeNode buildTree(int[] inorder, int[] postorder) {
            if(inorder==null||postorder==null||inorder.length==0||postorder.length==0||postorder.length!=inorder.length){
                return null;
            }
            int in=inorder.length-1;
            int post=postorder.length-1;
            return solve(inorder,0,in,postorder,0,post);
        }
        //x,y分别代表中序遍历起始、结束位置,i,j分别代表后序遍历起始、结束位置
        public TreeNode solve(int[] inorder,int x,int y,int[] postorder,int i,int j){
            if(x>y||i>j){
                return null;
            }
            TreeNode root=new TreeNode(postorder[j]);
                for(int k=x;k<=y;k++){
                    if(inorder[k]==postorder[j]){
                        //k-x代表中序遍历中根节点的左子树长度
                        root.left=solve(inorder,x,k-1,postorder,i,i+k-x-1);
                        root.right=solve(inorder,k+1,y,postorder,i+k-x,j-1);
                    }   
                }   
            return root;
        }
    
  • 相关阅读:
    JS的构造函数
    Wdcp在安装memcached出现错误的解决办法
    mac 下 xampp 多域名 多站点 多虚拟主机 配置
    JS快速获取图片宽高的方法
    全文检索引擎Solr系列——整合MySQL、MongoDB
    php:获取浏览器的版本信息
    css3 media媒体查询器用法总结
    转:利用node压缩、合并js,css,图片
    火车进站
    三角形有向面积
  • 原文地址:https://www.cnblogs.com/xym4869/p/12238813.html
Copyright © 2020-2023  润新知