• LeetCode | Construct Binary Tree from Inorder and Postorder Traversal


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

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

    /**
     * Definition for binary tree
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
     //从中序与后序遍历构建树,思想与上一题一样
     //唯一区别是后序遍历的尾为root,而先序遍历的首为root
     public class Solution {
         public int findRoot(int[] inorder, int key){     //在中序遍历中定位root
             if(inorder.length==0) return -1;
             int index = -1;
             for(int i=0; i<inorder.length; i++){
                 if(inorder[i]==key){
                     index = i; break;
                 }
             }
             return index;
         }
         
         //通过递归实现构建树的主逻辑
         public TreeNode buildTree(int[] inorder, int[] postorder, int instart, int inend, int postart, int poend){
             if(inorder.length==0 || postorder.length==0) return null;
             if(instart > inend) return null;
             TreeNode root = new TreeNode(postorder[poend]);
             int index = findRoot(inorder, root.val);
             root.left = buildTree(inorder, postorder, instart, index-1, postart, postart+index-1-instart);
             root.right = buildTree(inorder, postorder, index+1, inend, postart+index-1-instart+1, poend-1);
             return root;
         }
         
         //****leetcode主函数****
         public TreeNode buildTree(int[] inorder, int[] postorder) {
             return buildTree(inorder, postorder, 0, inorder.length-1, 0, postorder.length-1);
         }
     }
    



  • 相关阅读:
    进程池和线程池
    TCP并发、GIL、锁
    进程间通信
    装饰器与反射
    装饰器大全
    面向对象三大特征: 封装 继承 多态
    面向对象 魔术方法
    魔术方法
    ubuntu 中导 tarfile,win 不亲切
    os VS shutil
  • 原文地址:https://www.cnblogs.com/dosmile/p/6444464.html
Copyright © 2020-2023  润新知