zoukankan      html  css  js  c++  java
  • [leedcode 105] Construct Binary Tree from Preorder and Inorder Traversal

    Given preorder and inorder traversal of a tree, construct the binary tree.

    Note:
    You may assume that duplicates do not exist in the tree.

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    public class Solution {
        //The preorder and inorder traversals for the binary tree above is:
         /*   preorder = {7,10,4,3,1,2,8,11}
            inorder = {4,10,3,1,7,11,8,2}
    
            The first node in preorder alwasy the root of the tree. We can break the tree like:
            1st round:
            preorder:  {7}, {10,4,3,1}, {2,8,11}
            inorder:     {4,10,3,1}, {7}, {11, 8,2}
            可以发现,一趟遍历可以将数组一份为二,分别对应左子树集合和右子树集合
            使用preorder数组定位跟节点,利用inorder数组分左右子树。
            关键点:
            1 定位每层的根节点
            2 计算好offset
            注意getTree函数的定义*/
        public TreeNode buildTree(int[] preorder, int[] inorder) {
            if(preorder.length!=inorder.length||preorder.length==0) return null;
            return getTree(preorder,0,preorder.length-1,inorder,0,inorder.length-1);
        }
        TreeNode getTree(int[] preorder,int left1,int right1,int[] inorder,int left2,int right2){
            if(left1>right1) return null;
            if(left2>right2) return null;
            int temp=preorder[left1];
            TreeNode node=new TreeNode(temp);
            int index=left2;
            for(;index<=right2;index++){
                if(inorder[index]==temp)break;
            }
            int len=index-left2;
            node.left=getTree(preorder,left1+1,left1+len,inorder,left2,index-1);
            node.right=getTree(preorder,left1+len+1,right1,inorder,index+1,right2);
            return node;
        }
    }
  • 相关阅读:
    C# DictionaryHelper
    C# Autofac 的 BeanFactory
    正则替换
    java页面表格导出为Excel实现
    CentOS 7 下安装Nginx
    认识Java 虚拟机的架构
    06 查看网卡实时流量
    05 找出占用CPU、内存过高的进程
    04 一键查看服务器资源利用率
    03 批量创建100个用户并设置随机密码
  • 原文地址:https://www.cnblogs.com/qiaomu/p/4665637.html
Copyright © 2011-2022 走看看