zoukankan      html  css  js  c++  java
  • leetcode------Construct Binary Tree from Preorder and Inorder Traversal

    标题:

    Construct Binary Tree from Preorder and Inorder Traversal

    通过率: 26.5
    难度:  中等

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

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

    根据前序遍历和中序遍历构建二叉树:看一棵树如下:

        1
       / 
      2   4
          
       5    6
    前序为:12546
    中序为:25146


    从前序得知第一个数一定是树的root,通过中序得到右树和左树

    递归调用即可,其中要注意递归的条件个字符串拷贝时的用法,

    具体看代码

     1 /**
     2  * Definition for binary tree
     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         if(preorder.length==0||inorder.length==0){
    13             return null;
    14         }
    15         TreeNode root=new TreeNode(preorder[0]);
    16         int i=0;
    17         for(;i<inorder.length;i++){
    18             if(inorder[i]==preorder[0])break;
    19         }
    20         int [] new_pre_left,new_pre_right,new_in_left,new_in_right;
    21         if(i<preorder.length){
    22             new_in_left=new int[i];
    23             System.arraycopy(inorder, 0, new_in_left, 0, i); 
    24             new_pre_left=new int[i];
    25             System.arraycopy(preorder, 1, new_pre_left, 0, i);  
    26             root.left=buildTree(new_pre_left,new_in_left);
    27             
    28             new_in_right=new int[preorder.length-i-1];
    29             System.arraycopy(inorder, i+1, new_in_right, 0, preorder.length-i-1); 
    30             new_pre_right=new int[preorder.length-i-1];
    31              System.arraycopy(preorder, i+1, new_pre_right, 0, preorder.length-i-1); 
    32              root.right=buildTree(new_pre_right,new_in_right);
    33             
    34         }
    35         return root;
    36     }
    37 }
  • 相关阅读:
    大数据开发速查表
    静态图像介绍
    get请求如何传递数组参数
    Redis 6.0 新增功能
    JVM 出现 StackOverflowError和OutOfMemoryError的可能
    golang超级mapper包
    dotnet vs java vs go
    [翻译]Jupyter notebook .NET Core 内核预览1
    .NET Core到底有多强?
    .net core 运行时事件(Runtime Events)
  • 原文地址:https://www.cnblogs.com/pkuYang/p/4331096.html
Copyright © 2011-2022 走看看