zoukankan      html  css  js  c++  java
  • 【数据结构】算法 Construct Binary Tree from Preorder and Inorder Traversal 从前序与中序遍历序列构造二叉树

    Construct Binary Tree from Preorder and Inorder Traversal 从前序与中序遍历序列构造二叉树

    通过preorder 和inorder,构造一棵二叉树

    思路

    问题不复杂,有了前序和中序,可以恢复一棵二叉树。

    前序里面打头的肯定是root

    中序里面的root,将inorder 分成2份,左侧为左树,右侧为右树。

    需要pos 定位root,然后递归buildtree

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode() {}
     *     TreeNode(int val) { this.val = val; }
     *     TreeNode(int val, TreeNode left, TreeNode right) {
     *         this.val = val;
     *         this.left = left;
     *         this.right = right;
     *     }
     * }
     */
    class Solution {
        public TreeNode buildTree(int[] preorder, int[] inorder) {
            List<Integer> pre= new ArrayList<>();
            List<Integer> in= new ArrayList<>();
            int i =0;
            while(i<preorder.length){
                pre.add(preorder[i]);
                i++;
            }         
            i=0;
            while(i<inorder.length){
                in.add(inorder[i]);
                i++;
            }
            return _buildTree(pre,in);         
        }
    
        public TreeNode _buildTree(List<Integer> preorder, List<Integer> inorder){
            if(preorder.size()==0){return null;}
            int pos =0 ;          
            while(!inorder.get(pos).equals(preorder.get(0))){
                pos++;
            }
            List<Integer> lpre = new ArrayList<>();
            List<Integer> lin = new ArrayList<>();
            List<Integer> rpre = new ArrayList<>();
            List<Integer> rin = new ArrayList<>();
            for(int i = 0;i<pos ;i++){
                lpre.add(preorder.get(i+1));
                lin.add(inorder.get(i));
            }
            for(int i = pos+1;i<inorder.size();i++){
                rpre.add(preorder.get(i));
                rin.add(inorder.get(i));
            }
            TreeNode root = new TreeNode(preorder.get(0)) ;
            root.left = _buildTree(lpre,lin);
            root.right = _buildTree(rpre,rin);
            return root;
        }
    
    }
    
    
    

    Tag

    tree DFS Array

  • 相关阅读:
    Live2d Test Env
    Live2d Test Env
    Live2d Test Env
    Live2d Test Env
    Live2d Test Env
    Live2d Test Env
    Live2d Test Env
    Live2d Test Env
    python嵌套列表知多少
    旋转图像
  • 原文地址:https://www.cnblogs.com/dreamtaker/p/14667940.html
Copyright © 2011-2022 走看看