算法-递归遍历 从中序与后序遍历序列构造二叉树 2024-03-18 默认分类 暂无评论 236 次阅读 LeetCode 104. n叉树的最大深度 > [跳转链接](https://leetcode.cn/problems/maximum-depth-of-binary-tree/description/?envType=study-plan-v2&envId=top-100-liked) 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root = [3,9,20,null,null,15,7] 输出:3 示例 2: 输入:root = [1,null,2] 输出:2 提示: 树中节点的数量在 [0, 104] 区间内。 -100 <= Node.val <= 100 ```Go /** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ func maxDepth(root *TreeNode) int { if root == nil { return 0 } left := maxDepth(root.Left) right := maxDepth(root.Right) if left > right { return left + 1 } else { return right + 1 } } ``` LeetCode 106. 从中序与后序遍历序列构造二叉树 > [跳转链接](https://leetcode.cn/problems/construct-binary-tree-from-inorder-and-postorder-traversal/description/?envType=study-plan-v2&envId=top-interview-150 "LeetCode 106. 从中序与后序遍历序列构造二叉树") 给定两个整数数组 inorder 和 postorder , 其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历, 请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder = [9,3,15,20,7], postorder = [9,15,7,20,3] 输出:[3,9,20,null,null,15,7] 示例 2: 输入:inorder = [-1], postorder = [-1] 输出:[-1] 提示: 1 <= inorder.length <= 3000 postorder.length == inorder.length -3000 <= inorder[i], postorder[i] <= 3000 inorder 和 postorder 都由 不同 的值组成 postorder 中每一个值都在 inorder 中 inorder 保证是树的中序遍历 postorder 保证是树的后序遍历 ```Go /** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ package code var node2Idx map[int]int func buildTree(inorder []int, postorder []int) *TreeNode { node2Idx = make(map[int]int) for idx, node := range inorder { node2Idx[node] = idx } return build(inorder, postorder, 0) } // 递归调用二叉树的函数 func build(inorder []int, postorder []int, offset int) *TreeNode { length := len(inorder) if length == 0 { return nil } val := postorder[length-1] curIdx := node2Idx[val] - offset return &TreeNode{ Val: val, Left: build(inorder[:curIdx], postorder[:curIdx], offset), Right: build(inorder[curIdx+1:], postorder[curIdx:length-1], offset+curIdx+1), } } func TestDay106() { root := buildTree2([]int{9, 3, 15, 20, 7}, []int{9, 15, 7, 20, 3}) PrintTree(root) } ``` 文章目录 LeetCode 104. n叉树的最大深度 LeetCode 106. 从中序与后序遍历序列构造二叉树 标签: 算法 转载请注明文章来源 本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
评论已关闭