00:00 / 01:12
连播
清屏
智能
倍速
点赞84
00:00 / 02:11:29
连播
清屏
智能
倍速
点赞0
Asthenian1年前
[算法学习Day337]BST树迭代器-中序遍历解法 需求分析: 这个问题要求实现一个迭代器,能够遍历二叉搜索树(BST)。迭代器需要按中序遍历顺序返回树的节点值,并且支持 next() 和 hasNext() 方法来逐步访问这些节点。 next():返回下一个节点的值。 hasNext():判断是否还有下一个节点。 在初始化时,树的根节点会被传入,并且应该对树进行一次中序遍历,收集所有节点值。 算法选型: 选择了中序遍历(Inorder Traversal),因为中序遍历二叉搜索树会按照从小到大的顺序返回树的节点值,这与题目要求的顺序一致。 由于 BST 中序遍历的顺序就是我们所需要的顺序,因此可以在初始化时对树进行一次中序遍历并将结果存储在一个列表中。然后通过一个索引 idx 来指示当前遍历到的位置,利用 next() 方法返回节点值,并利用 hasNext() 方法判断是否还有后续节点。 逻辑实现: 构造函数 BSTIterator(TreeNode root): 初始化一个空的列表 list,用来存储树的节点值。 使用深度优先搜索(DFS)来遍历二叉搜索树并将节点值按中序的顺序添加到 list 中。 方法 next(): 返回 list 中当前 idx 索引对应的节点值,并且将 idx 增加,以指向下一个节点。 方法 hasNext(): 判断 idx 是否小于 list.size(),如果小于,表示还有节点可以访问,返回 true;否则返回 false。 方法 dfs(TreeNode node, List<Integer> list): 该方法执行中序遍历的递归操作:先遍历左子树,再访问当前节点,再遍历右子树。 每个节点的值会被添加到 list 中。递归的结束条件是当前节点为空,表示叶子节点的子树已经遍历完成。 #计算机 #力扣 #面试 #算法 #Java
00:00 / 04:01
连播
清屏
智能
倍速
点赞16
Asthenian11月前
[算法学习Day398]二叉树最大路径和:DFS 需求分析: 该代码实现了一个功能:给定一棵二叉树,计算并返回树中最大路径和。路径可以从任意节点开始和结束,并且可以不通过根节点。节点的路径和是通过节点的值累加的,并且路径可以包含一个节点的多个子树。 算法选型: 采用深度优先搜索(DFS)遍历二叉树。该方法可以有效地在每个节点处计算出最大路径和,处理子树的路径和问题,同时保证了最大路径和的计算准确性。通过递归的方式,分别计算每个节点的左子树和右子树的最大路径和,并在每次递归时更新全局最大路径和。 逻辑实现: 使用一个全局变量 ans 来记录树中遇到的最大路径和,初始化为 Integer.MIN_VALUE,以便处理路径中有负值的情况。 maxPathSum 方法作为主函数,调用 dfs 方法进行递归遍历。 dfs 方法的递归过程:如果当前节点为空,返回 0,表示没有路径和。 对当前节点的左右子树分别进行递归,计算出左子树和右子树的最大路径和。 计算当前节点的最大路径和,可能的最大路径和为:left + right + root.val(包含左右子树路径),并更新 ans。 返回当前节点的最大单侧路径和(如果是负值,则返回 0,表示不取该路径)。 最后返回更新后的 ans,即二叉树的最大路径和。 #计算机 #面试 #Java #秋招 #算法
00:00 / 07:21
连播
清屏
智能
倍速
点赞26
00:00 / 04:22
连播
清屏
智能
倍速
点赞1
00:00 / 06:34
连播
清屏
智能
倍速
点赞16
00:00 / 17:15
连播
清屏
智能
倍速
点赞0