作者简介:大家好,我是未央;
博客首页:未央.303
系列专栏:递归、搜索与回溯算法
每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!!!!
文章目录
- 前言
- 一、验证二叉搜索树
- 1.1 题目描述
- 1.2 题目解析
- 1.2.1 算法原理
- 1.2.2 代码编写
- 二、二叉搜索树中第K小的元素
- 2.1 题目描述
- 2.2 题目解析
- 2.2.1 算法原理
- 2.2.2 代码编写
- 总结
前言
一、验证二叉搜索树
1.1 题目描述
描述:
给你一个二叉树的根节点root
,判断其是否是一个有效的二叉搜索树。
有效二叉搜索树定义如下:
- 节点的左子树只包含 小于 当前节点的数。
- 节点的右子树只包含 大于 当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树。
提示:
- 树中节点数目范围在
[1, 10^4]
内-2^31 <= Node.val <= 2^31 - 1
示例1:
示例2:
1.2 题目解析
1.2.2 算法原理
本题我们可以采用递归的方法解决;
而要写好一个递归,首先就要知道递归的三部曲:
第一步:
先找一下是否有和主问题相同的子问题!!!!!-----> 关系到函数头的设计;
第二步:
只需要关心某一个子问题是如何解决即可!!!!-----> 关系到函数体的书写;
第三步:
最后再注意一下递归函数的出口即可;
所以我们首先就要思考以上三个问题的解决:
第一步:函数头
我们题目要求
而将两个链表合并就成了和主问题相同的子问题;
而函数头就和题目中给定的函数头一样;
第二步:函数体
我们要找到某一个子问题如何解决;
子问题即:
要解决上述子问题:
(1)
(2)
(3)
第三步:递归出口
递归出口即:
1.2.1 代码编写
二、二叉搜索树中第K小的元素
2.1 题目描述
描述:
给定一个二叉搜索树的根节点root
,和一个整数k
,请你设计一个算法查找其中第k
个最小元素(从 1 开始计数)。
提示:
- 树中的节点数为
n
。1 <= k <= n <= 104
0 <= Node.val <= 104
示例1:
示例2:
2.2 题目解析
2.2.1 算法原理
本题我们可以采用递归的方法解决;
而要写好一个递归,首先就要知道递归的三部曲:
第一步:
先找一下是否有和主问题相同的子问题!!!!!-----> 关系到函数头的设计;
第二步:
只需要关心某一个子问题是如何解决即可!!!!-----> 关系到函数体的书写;
第三步:
最后再注意一下递归函数的出口即可;
所以我们首先就要思考以上三个问题的解决:
第一步:函数头
我们题目要求
而将两个链表合并就成了和主问题相同的子问题;
而函数头就和题目中给定的函数头一样;
第二步:函数体
我们要找到某一个子问题如何解决;
子问题即:
要解决上述子问题:
(1)
(2)
(3)
第三步:递归出口
递归出口即: