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

    分治法后序遍历建树

    对数组, 输入值为数组(起始点和终止点控制数组的长度和节点的值---去掉用过的点的位置) :

    1递归出口,   if (prestart > preend || instart > inend) return null;

    2构造节点, 根据数组的某个位置

    3操作数组的长度, 起始点和终止点--> 为了下一个节点

    4分治法建立子节点关系, 改变输入值的数组的起始点和终止点(控制数组的长度和节点的值---去掉用过的点的位置) :

    5后序遍历返回root

    public TreeNode buildTree(int[] preorder, int[] inorder) {
            Map<Integer, Integer> map = new HashMap<>();
            for (int i = 0; i < inorder.length; i++) {
                map.put(inorder[i], i);
            }
            return help(preorder, inorder, 0, preorder.length - 1, 0, inorder.length - 1, map);
        }
        private TreeNode help(int[] preorder, int[] inorder, 
                              int prestart, int preend, int instart, int inend, Map map){
            if (prestart > preend || instart > inend) return null;
            TreeNode root = new TreeNode(preorder[prestart]);
            int pos = (int)map.get(root.val);
            int gap = pos - instart;
            root.left = help(preorder, inorder, prestart + 1, prestart + gap, instart, pos - 1, map);
            root.right = help(preorder, inorder, prestart + 1 + gap, preend, pos + 1, inend, map);
            return root;
        }
    }
    

    围绕构建节点值, 和递归的输入值的起始点和终止点上面

  • 相关阅读:
    hdu 5119 Happy Matt Friends
    hdu 5128 The E-pang Palace
    hdu 5131 Song Jiang's rank list
    hdu 5135 Little Zu Chongzhi's Triangles
    hdu 5137 How Many Maos Does the Guanxi Worth
    hdu 5122 K.Bro Sorting
    Human Gene Functions
    Palindrome(最长公共子序列)
    A Simple problem
    Alignment ( 最长上升(下降)子序列 )
  • 原文地址:https://www.cnblogs.com/apanda009/p/7270347.html
Copyright © 2011-2022 走看看