摘要:
把二叉搜索树转换为累加树 你的代码实现了将二叉搜索树(BST)转换为累加树的功能。核心思路是利用BST的性质,通过反向中序遍历(右-根-左),从大到小累加节点值。具体实现如下: 使用一个全局变量 sum1 来记录累加和。 在反向中序遍历过程中,先遍历右子树,然后更新当前节点的值为累加和,最后遍历左子 阅读全文
摘要:
删除二叉搜索树中的节点 核心思路:删除操作需要根据节点的不同情况分别处理。如果删除的是叶子节点,直接删除即可;如果删除的节点只有一个子树,用该子树替换被删除的节点;如果删除的节点有两个子树,则需要找到左子树的最大值或右子树的最小值来替代被删除的节点。 代码逻辑: deleteNode 方法:首先判断 阅读全文
摘要:
二叉树的最近公共祖先(LeetCode 236) 功能概述 在给定的二叉树中,找出两个指定节点 p 和 q 的最近公共祖先(LCA)。 实现思路 高效递归方法: 递归结束条件为当前节点 root 为空或者等于 p 或 q,此时直接返回 root。 分别递归遍历左子树和右子树,根据左右子树的返回结果判 阅读全文
摘要:
1.验证二叉搜索树(98. 验证二叉搜索树): isValidBST(TreeNode root) 方法用于判断给定的二叉树是否为二叉搜索树。 首先检查根节点是否为空,若为空则返回 true。 然后检查根节点的左子节点值是否大于等于根节点值,右子节点值是否小于等于根节点值,若有不满足则返回 fals 阅读全文
摘要:
从前序与中序遍历序列构造二叉树(LeetCode 105) 核心思路: 使用哈希表存储中序遍历中每个值的索引,以便快速查找。 前序遍历的第一个元素是根节点。 在中序遍历中找到根节点的位置,从而确定左子树和右子树的范围。 递归构建左子树和右子树。 时间复杂度:O(n),其中 n 是树的节点数。 空间复 阅读全文
摘要:
左叶子之和(LeetCode 404) 目标:计算给定二叉树中所有左叶子节点的值之和。 思路: 使用深度优先搜索(DFS)遍历二叉树。 引入一个 flag 参数来标识当前节点是位于其父节点的左侧还是右侧。对于左叶子节点,flag 为 -1。 在递归过程中,只有当当前节点是叶子节点(没有左右子节点)且 阅读全文
摘要:
N 叉树的最大深度 功能 计算 N 叉树的最大深度。N 叉树是一种每个节点可以有多个子节点的树结构。 实现方法 使用递归方法: 如果根节点为空,返回深度为 0。 如果根节点没有子节点,返回深度为 1。 遍历根节点的所有子节点,递归计算每个子树的最大深度。 使用数组存储每个子树的深度,排序后返回最大值 阅读全文
摘要:
//111. 二叉树的最小深度 public int minDepth(TreeNode root) { //递归实现,效率不高8ms /if (root == null) return 0; if (root.left == null && root.right == null) return 1 阅读全文
摘要:
1.统一迭代法(Traversal 方法) 原理:使用栈和两个指针(cur 和 pre),cur 用于指向当前待处理节点,pre 记录最近一次弹出的节点。通过判断节点是否为空、有无右子树以及右子树是否处理完成等条件,在一个循环中统一实现三种遍历。 优势:提供了一种通用的迭代遍历框架,减少代码冗余,便 阅读全文
摘要:
topKFrequent 方法:返回出现频率前 k 高的元素 这个方法通过以下步骤实现: 统计频率: 使用 HashMap 统计每个元素的出现频率。 时间复杂度:O(n),其中 n 是数组的长度。 优先级队列(最大堆): 使用优先级队列(PriorityQueue)来存储频率信息,队列按照频率降序排 阅读全文