• 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.

     本题通过前序和中序来推断这个二叉树,一定会用到递归的方法,同时需要思考一下递归和动态规划的区别是什么,如果子问题之间相互之间是相互独立的,就需要使用递归的方法,而如果子问题之间是不是相互独立的,就需要使用动态规划的算法。我们要考虑的首先是递归的参数是什么,本题是preorder和inorder的参数应该分别都给出什么,发现preorder只要给出开始的索引就可以,inorder需要给出开始和结束索引,因为inorder要给函数进行递归,代码如下:

     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode(int x) { val = x; }
     8  * }
     9  */
    10 public class Solution {
    11     public TreeNode buildTree(int[] preorder, int[] inorder) {
    12         return helper(0,0,inorder.length-1,preorder,inorder);
    13     }
    14     public TreeNode helper(int preStart,int inStart,int inEnd,int[] preorder,int[] inorder){
    15         if(preStart>preorder.length-1||inStart>inEnd) return null;
    16         TreeNode root = new TreeNode(preorder[preStart]);
    17         int indexIn = 0;
    18         for(int i=inStart;i<=inEnd;i++){
    19             if(inorder[i]==root.val) indexIn = i;
    20         }
    21         root.left = helper(preStart+1,inStart,indexIn-1,preorder,inorder);
    22         root.right = helper(preStart+indexIn-inStart+1,indexIn+1,inEnd,preorder,inorder);
    23         return root;
    24     }
    25 }

     

     
  • 相关阅读:
    仅当使用了列的列表并且 IDENTITY_INSERT 为 ON 时,才能为表'SpeType'中的标识列指定显式值
    SQL Server 创建作业系列问题
    常用WebService收集
    SQL Server中调用WebService的实例
    本地时间与格林威治时间相互转换
    $route和$router的区别?
    超详细的Canal入门,看这篇就够了!
    linux 安装redis 完整步骤
    什么是JSON
    The expression 'list' evaluated to a null value
  • 原文地址:https://www.cnblogs.com/codeskiller/p/6477182.html
Copyright © 2020-2023  润新知