• leetcode刷题笔记一百零六题 从中序与后序遍历序列构造二叉树


    leetcode刷题笔记一百零六题 从中序与后序遍历序列构造二叉树

    源地址:106. 从中序与后序遍历序列构造二叉树

    问题描述:

    根据一棵树的中序遍历与后序遍历构造二叉树。

    注意:
    你可以假设树中没有重复的元素。

    例如,给出

    中序遍历 inorder = [9,3,15,20,7]
    后序遍历 postorder = [9,15,7,20,3]
    返回如下的二叉树:

    3

    /
    9 20
    /
    15 7

    /**
    与105题解法类似,只不过根节点通过后序遍历的尾结点判断
    */
    /**
     * Definition for a binary tree node.
     * class TreeNode(var _value: Int) {
     *   var value: Int = _value
     *   var left: TreeNode = null
     *   var right: TreeNode = null
     * }
     */
    object Solution {
        def buildTree(inorder: Array[Int], postorder: Array[Int]): TreeNode = {
            val inorderLen = inorder.length
            val postorderLen = postorder.length
            if (inorderLen != postorderLen) return null
            def helper(inorder: Array[Int], postorder: Array[Int], inLeft: Int, inRight: Int, postLeft: Int, postRight: Int): TreeNode = {
                //递归终止条件
                if (inLeft > inRight || postLeft > postRight) return null
                val povit = postorder(postRight)
                val root = new TreeNode(povit)
                val povitIndex = inorder.indexOf(povit)
                root.left = helper(inorder, postorder, inLeft, povitIndex-1, postLeft, postRight - (inRight - povitIndex)-1)
                root.right = helper(inorder, postorder, povitIndex+1, inRight, postLeft+povitIndex-inLeft, postRight-1)
                return root
            }
            return helper(inorder, postorder, 0, inorderLen-1, 0, postorderLen-1)
        }
    }
    
  • 相关阅读:
    关于java.lang.reflect.InvocationTargetException
    Java并发编程(三)后台线程(Daemon Thread)
    Lab 7-2
    Lab 7-1
    Lab 6-3
    Lab 6-2
    Lab 6-1
    Lab 5-1
    Lab 3-4
    Lab 3-3
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/13434656.html
Copyright © 2020-2023  润新知