
算法题_树
wenkun97
这个作者很懒,什么都没留下…
展开
-
LeetCode 程序员面试经典面试题 04.06. 后继者
设计一个算法,找出二叉搜索树中指定节点的“下一个”节点(也即中序后继)。 如果指定节点没有对应的“下一个”节点,则返回null。 示例 1: 输入: root = [2,1,3], p = 1 2 / \ 1 3 输出: 2 示例 2: 输入: root = [5,3,6,2,4,null,null,1], p = 6 5 / \ 3 6 / 2 4 / 1 输出: null 有递归法和非递归法: 思想类似, 与root 节点比较,若p.val >= root.val, 从右子原创 2020-08-16 22:14:01 · 185 阅读 · 0 评论 -
LeetCode 110. 平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 示例 1: 给定二叉树 [3,9,20,null,null,15,7] 3 / 9 20 / 15 7 返回 true 。 示例 2: 给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / \ 2 2 / \ 3 3 / 4 4 返回 false 。 tips : 自顶向上法, 时间复杂度O(n) cla原创 2020-05-10 20:25:22 · 168 阅读 · 0 评论 -
LeetCode 144. 二叉树的前序遍历
给定一个二叉树,返回它的 前序 遍历。 示例: 输入: [1,null,2,3] 1 2 / 3 输出: [1,2,3] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? tips : 非递归法,使用栈,先压右子节点,再压左子节点。 class Solution { public: vector<int> preorderTraversal(TreeNode* root) ...原创 2020-04-26 16:29:25 · 197 阅读 · 0 评论 -
LeetCode 145. 二叉树的后序遍历
给定一个二叉树,返回它的 后序 遍历。 示例: 输入: [1,null,2,3] 1 2 / 3 输出: [3,2,1] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 非递归版tips : 使用栈来记录,类似dfs, 先求出其逆后序遍历的结果,然后再反转 /** * Definition for a binary tree node. * struct TreeNode { * ...原创 2020-04-25 15:39:48 · 140 阅读 · 0 评论 -
LeetCode 501. 二叉搜索树中的众数
给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。 假定 BST 有如下定义: 结点左子树中所含结点的值小于等于当前结点的值 结点右子树中所含结点的值大于等于当前结点的值 左子树和右子树都是二叉搜索树 例如: 给定 BST [1,null,2,2], 1 2 / 2 返回[2]. 提示:如果众数超过1个,不需考虑输出顺序 进阶:你可以不使用额外的空间吗?(...原创 2020-04-23 23:16:24 · 148 阅读 · 0 评论 -
LeetCode 450. 删除二叉搜索树中的节点
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。 一般来说,删除节点可分为两个步骤: 首先找到需要删除的节点; 如果找到了,删除它。 说明: 要求算法时间复杂度为 O(h),h 为树的高度。 tips : 递归,删除该位置节点后,要用前驱/后继来替代,然后再递归删除节点。 cl...原创 2020-04-15 14:47:24 · 150 阅读 · 0 评论 -
LeetCode 54.二叉搜索树的第k大节点
给定一棵二叉搜索树,请找出其中第k大的节点。 示例 1: 输入: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2 输出: 4 示例 2: 输入: root = [5,3,6,2,4,null,null,1], k = 3 5 / \ 3 6 / \ 2 4 / 1 输出: 4 tips: 逆中序遍历, 维护一个全局计数器,当计数器到达k时,记...原创 2020-03-11 12:58:49 · 205 阅读 · 0 评论 -
Leetcode 543.二叉树的直径
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。 示例 : 给定二叉树 1 / \ 2 3 / \ 4 5 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。 注意:两结点之间的路径长度是以它们之间边的数目表示。 tips:递归,开一个全...原创 2020-03-10 14:53:13 · 124 阅读 · 0 评论 -
Leetcode 235. 二叉搜索树的最近公共祖先
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5] 示例 1: 输入: root = [6,2,...原创 2020-03-09 12:47:11 · 338 阅读 · 0 评论 -
Leetcode 98. 验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例 1: 输入: 2 / 1 3 输出: true 示例 2: 输入: 5 / 1 4 / 3 6 输出: false 解释: 输入为: [5,1,4,null,null,3...原创 2020-03-02 23:26:28 · 116 阅读 · 0 评论