Keshawn_lu's Blog

Keshawn_lu's Blog

Become a better myself.

Leetcode 701. 二叉搜索树中的插入操作
题目简介:给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据保证,新值和原始二叉搜索树中的任意节点值都不同。 注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回任意有效的结果。 例如, 123456789给定二叉搜索树: 4 / \ 2 7 / \ 1 3和 插入的值: 5 你可以返回这个二叉搜索树: 12345 4 / \ 2 7 / \ /1 3 5 或者这个树也是有效的: 5 /...
Leetcode 145. 二叉树的后序遍历
题目简介:给定一个二叉树,返回它的 后序 遍历。 示例: 12345678输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 思路:递归的算法就不说了,很熟练了。 说说迭代的方法,也就是把递归栈显式的表达出来。这时需要将处理的节点放入栈之后,紧接着放入一个空指针作为标记。 这种方法对于前中后序遍历都可用,只需交换次序即可。 代码如下:12345678910111213141516171819202122232425262728293031323334353637383940414...
Leetcode 117. 填充每个节点的下一个右侧节点指针 II
题目简介:给定一个二叉树 123456struct Node { int val; Node *left; Node *right; Node *next;} 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。 初始状态下,所有 next 指针都被设置为 NULL。 示例: 123输入:root = [1,2,3,4,5,null,7]输出:[1,#,2,3,#,4,5,7,#]解释:给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 ...
Leetcode 235. 二叉搜索树的最近公共祖先
题目简介:给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5] 示例 1: []: 123输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8输出: 6 解释: 节点 2 和节点 8 的最近公共祖先是 6。 示例 2: 123输入: ...
Leetcode 113. 路径总和 II
题目简介:给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。 说明: 叶子节点是指没有子节点的节点。 示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1 返回: 1234[ [5,4,11,2], [5,8,4,5]] 思路:关于树的回溯题,其实和数组的差不多,需要注意的是结点的val值可能为负的。 代码如下:12345678910111...
Leetcode 106. 从中序与后序遍历序列构造二叉树
题目简介:根据一棵树的中序遍历与后序遍历构造二叉树。 注意:你可以假设树中没有重复的元素。 例如,给出 12中序遍历 inorder = [9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3] 返回如下的二叉树: 12345 3 / \9 20 / \ 15 7 思路:我们首先将每个结点在中序遍历中的位置存储下来。 因为后序遍历的顺序为左右根,所以从后序遍历的最后一个结点开始遍历(树的根节点)。 每次根据后序遍历遍历到的结点去找出该结点在中序遍历中的位置,然后递归即可。 tip: 由于后序遍历是左右根,所以递归时是先构建右子树,再构建左子树。...
Leetcode 501. 二叉搜索树中的众数
题目简介:给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素)。 假定 BST 有如下定义: 结点左子树中所含结点的值小于等于当前结点的值 结点右子树中所含结点的值大于等于当前结点的值 左子树和右子树都是二叉搜索树 例如:给定 BST [1,null,2,2], 123451 \ 2 /2 返回[2]. 提示:如果众数超过1个,不需考虑输出顺序 思路:没想太多,首先第一次遍历,将记录存入哈希表中,并找出其中的最大出现次数Maxnum。 第二次遍历哈希表,将出现次数等于Maxnum的值存入结果数组中,最后返回即可。 tip: 学会哈希表的遍历 ...
Leetcode 617. 合并二叉树
题目简介:给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。 你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。 示例 1: 1234567891011121314输入: Tree 1 Tree 2 1 2 / \ ...
Leetcode 968. 监控二叉树
题目简介:给定一个二叉树,我们在树的节点上安装摄像头。 节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。 计算监控树的所有节点所需的最小摄像头数量。 示例 1: 123输入:[0,0,null,0,0]输出:1解释:如图所示,一台摄像头足以监控所有节点。 示例 2: 123输入:[0,0,null,0,null,0,null,null,0]输出:2解释:需要至少两个摄像头来监视树的所有节点。 上图显示了摄像头放置的有效位置之一。 提示: 给定树的节点数的范围是 [1, 1000]。 每个节点的值都是 0。 思路:后序遍历,自下而上的来解决问题。 我们将结点的状态分为三...
Leetcode 538. 把二叉搜索树转换为累加树
题目简介:给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。 例如: 123456789输入: 原始二叉搜索树: 5 / \ 2 13 输出: 转换为累加树: 18 / \ 20 13 思路:一开始的想法是先将结点值都一个个保存下来,然后再遍历搜索累加,但是这样子很慢。 后来发现这是个二叉搜索树,那么...
avatar
鸣蜩十九
Always
友链
CSDN BiliBili