栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

10-- 根据中序遍历和后序遍历,构造二叉树

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

10-- 根据中序遍历和后序遍历,构造二叉树

Github链接

思路如下注释

 // 中序:   [4, 1,  5,  3, 6, 2, 7] --> 记录到字典: [[4: 0], [1: 1], [5: 2],[3: 3],[6: 4],[2: 5],[7: 6]]

 //  后序:  [4, 5, 1, 6,   7,   2, 3]

 对后序数组,从后往前

 0. curIndex = 6

 1. 当取3的时候, index =>  dict[3] = 3 , 把curIndex = 5

 2.那么当前根节点的后继节点, 为index + 1 = 4

   那么当前根节点的前驱节点, 为index - 1 = 2

 3. 先求当前根节点右边 , 再求左边,递归调用

 4. 当left > right 不符合

 5. 其中第二步,递归进来的时候,参数左为4,参数右为6

 rootVal = 2

 rootNode = TreeNode(rootVal)

 新的根节点为 2, 从字典中取index --> dict[2] = 5, 把curIndex = 4

 右边值: TreeNode(7)  left = (index + 1) == 6, right =  6

 左边值: TreeNode(6) left = 4, right = (curIndex - 1) == 4

方法总结

 1. 中序遍历用来生成字典

 2. 后序遍历,从后往前,生成右,左节点,递归调用

class xiapi10 {
    var myPostorder = [Int]()
    var curIndex = 0
    var dict = [Int: Int]()
    
    func buildTree(_ inorder: [Int], _ postorder: [Int]) -> TreeNode10? {
        myPostorder = postorder
        curIndex = myPostorder.count - 1
        
        for index in 0.. TreeNode10? {
        if left > right {
            return nil
        }
        
        let rootVal = myPostorder[curIndex]
        let rootNode = TreeNode10(rootVal)
        
        guard let index = dict[rootVal] else {
            return nil
        }
        curIndex -= 1
        rootNode.right = getNodeByLeftAndRight(index + 1, right)
        rootNode.left = getNodeByLeftAndRight(left, index - 1)
        
        return rootNode
    }
    
}

class TreeNode10 {
    var val: Int
    var left: TreeNode10?
    var right: TreeNode10?
    
    init() {
        self.val = 0
        self.left = nil
        self.right = nil
    }
    
    init(_ val: Int) {
        self.val = val
        self.left = nil
        self.right = nil
    }
    
    init(_ val: Int, _ left: TreeNode10?, _ right: TreeNode10?) {
        self.val = 0
        self.left = left
        self.right = right
    }
    
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/988078.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号