669. 修剪二叉搜索树
题目链接:https://leetcode.cn/problems/trim-a-binary-search-tree/
0x1 看到题目的第一想法
0x2 自己实现过程中遇到哪些困难
0x3 今日学习的文章链接,或者视频链接
0x4 看完代码随想录之后的想法
- 二叉搜索树删除节点,保留原节点
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16class Solution:
def trimBST(self, root: Optional[TreeNode], low: int, high: int) -> Optional[TreeNode]:
if not root:
return root
# 函数输入root,输出符合条件的节点头
# 当前节点的值在[low, high]区间左侧,说明符合条件的头节点要去右侧寻找,并直接返回!!等价于删掉了当前节点
if(root.val < low):
return self.trimBST(root.right, low, high)
# 当前节点的值在[low, high]区间右侧,说明符合条件的头节点要去左侧寻找,并直接返回!!等价于删掉了当前节点
elif(root.val > high):
return self.trimBST(root.left, low, high)
# 如果这两个都没进去,说明root.val在[low, high]的区间里面,当前的节点也是合理的这个节点不能删,所以要用本节点root.left root.right接住
root.left = self.trimBST(root.left, low, high)
root.right = self.trimBST(root.right, low, high)
return root
0x5 今日收获,记录一下自己的学习时长
- 1.5h
108.将有序数组转换为二叉搜索树
题目链接:https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree/
0x1 看到题目的第一想法
0x2 自己实现过程中遇到哪些困难
0x3 今日学习的文章链接,或者视频链接
0x4 看完代码随想录之后的想法
- 类似前(后)序和中序构造二叉树,寻找切割点
0x5 今日收获,记录一下自己的学习时长
- 45min
538. 把二叉搜索树转换为累加树
题目链接:https://leetcode.cn/problems/convert-bst-to-greater-tree/
0x1 看到题目的第一想法
0x2 自己实现过程中遇到哪些困难
0x3 今日学习的文章链接,或者视频链接
0x4 看完代码随想录之后的想法
- 需要两个指针,pre和cur,pre全局遍历变量,记录前一个节点的值
- 遍历顺序:右中左
0x5 今日收获,记录一下自己的学习时长
- 1h
待重点复习
669, 108, 538
总结
- 二叉搜索树删除节点,保留原节点
- 将有序数组转换为二叉搜索树
- 切割点
- 把二叉搜索树转换为累加树
- 右中左
- pre,cur