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;
        }
    }
  • 相关阅读:
    Day 20 初识面向对象
    Day 16 常用模块
    Day 15 正则表达式 re模块
    D14 模块 导入模块 开发目录规范
    Day 13 迭代器,生成器,内置函数
    Day 12 递归,二分算法,推导式,匿名函数
    Day 11 闭包函数.装饰器
    D10 函数(二) 嵌套,命名空间作用域
    D09 函数(一) 返回值,参数
    Day 07 Day08 字符编码与文件处理
  • 原文地址:https://www.cnblogs.com/qiaomu/p/4665637.html
Copyright © 2011-2022 走看看