Leetcode 671. 二叉树中第二小的节点 C++
程序员文章站
2024-02-18 09:06:34
...
Leetcode 671. 二叉树中第二小的节点
题目
给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0。如果一个节点有两个子节点的话,那么该节点的值等于两个子节点中较小的一个。
给出这样的一个二叉树,你需要输出所有节点中的第二小的值。如果第二小的值不存在的话,输出 -1 。
测试样例
示例 1:
输入:
2
/ \
2 5
/ \
5 7
输出: 5
说明: 最小的值是 2 ,第二小的值是 5 。
示例 2:
输入:
2
/ \
2 2
输出: -1
说明: 最小的值是 2, 但是不存在第二小的值。
题解
dfs遍历树,用两个变量记录前二小的节点值。由题意可知,最小的节点值一定是根节点的值,因此我们只需要考虑第二小值。详细过程见代码
代码
int first = INT_MAX;
int second = INT_MAX;
bool find = false;
void search(TreeNode* root){
if(root == NULL) return;
if(root->val > first && second>=root->val){
second = root->val;
find = true;
}
search(root->left);
search(root->right);
}
int findSecondMinimumValue(TreeNode* root) {
if(root == NULL) return -1;
first = root->val;
search(root);
if(!find) return -1;
return second;
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/second-minimum-node-in-a-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。