zoukankan      html  css  js  c++  java
  • Leecode no.889 根据前序和后序遍历构造二叉树

    package tree;

    import java.util.Arrays;

    /**
    *
    * 889. 根据前序和后序遍历构造二叉树
    * 返回与给定的前序和后序遍历匹配的任何二叉树。
    *
    * pre 和 post 遍历中的值是不同的正整数。
    *
    * @author Tang
    * @date 2021/7/29
    */
    public class ConstructFromPrePost {

    /**
    * 思路: 对于当前节点 拆分出左子树有哪些节点,右子树有哪些节点
    * 根据 前序遍历的第二个节点是左子节点的性质 找到第二个节点在后续遍历中的位置,从而判断左子树节点个数
    * @param preorder
    * @param postorder
    * @return
    */
    public TreeNode constructFromPrePost(int[] preorder, int[] postorder) {
    if(preorder.length == 0){
    return null;
    }
    TreeNode root = new TreeNode(preorder[0]);
    if(preorder.length == 1){
    return root;
    }
    int leftCount = 0;
    for(int i = 0; i < postorder.length; i++){
    if(postorder[i] == preorder[1]){
    leftCount = i+1;
    }
    }
    //左子树递归
    root.left = constructFromPrePost(Arrays.copyOfRange(preorder, 1, leftCount+1),
    Arrays.copyOfRange(postorder, 0, leftCount));
    //右子树递归
    root.right = constructFromPrePost(Arrays.copyOfRange(preorder, leftCount+1, preorder.length),
    Arrays.copyOfRange(postorder, leftCount, postorder.length - 1));
    return root;
    }


    public static void main(String[] args) {

    }


    }
  • 相关阅读:
    react 入坑笔记(五)
    练习
    高级指令
    进阶指令
    基础指令
    VMware 备份操作系统
    Ubuntu 用户的切换
    形态学转换
    图像模糊
    域名拆分 tld
  • 原文地址:https://www.cnblogs.com/ttaall/p/15076989.html
Copyright © 2011-2022 走看看