题目形容
给定一个非空非凡的二叉树,每个节点都是负数,并且每个节点的子节点数量只能为 2 或 0。如果一个节点有两个子节点的话,那么该节点的值等于两个子节点中较小的一个。
给出这样的一个二叉树,你须要输入所有节点中的第二小的值。如果第二小的值不存在的话,输入 -1。
示例 1:
输出:
2
/ \
2 5
/ \
5 7
输入: 5
阐明: 最小的值是 2,第二小的值是 5。
解题思路
题目解析:刚开始解这题没看懂题目意思,依据题目的束缚,根节点必然是最小的节点,所以第二小节点就变成了求剩下子节点的最小值
这题想通了就简略
一、应用递归,
1、如果以后节点和父节点的值不等,那么以后节点就是第二小的节点,剩下的节点就不必管了,间接返回节点值
2、如果以后节点和父节点的值雷同,则将以后节点作为根节点进行递推,先判空,而后获取左右两节点的返回值,再依据返回值,看返回上一层的值 a:左 / 右节点没找到,则返回右 / 左节点的值,b:如果左右都有返回值,则取小值。
二、应用迭代
1、依据题意,先对根几点进行判断,2、而后找到剩下所有节点的值中,不等于根节点值的节点的最小值
3、将找到的最小值,综合根节点的左右节点值执行判断
a、最小值和根节点值不雷同,则找到了第二小值,间接返回;b、最小值和根节点值雷同,再判断,如果最小值和左右节点的大值都相等 ----> 最小值就是根值 ---> 未找到第二小的值,返回 -1;c、最小值和根节点值雷同,如果最小值小于左右节点的大值 ---> 根节点左右值中的大值即便第二小的值 ---> 返回大值
语言积攒和技巧
q.offer
q.poll
对题意的了解和对约束条件的应用很重要
vscode 代码链接
https://github.com/lunaDolphi…
https://github.com/lunaDolphi…