671. 二叉树中第二小的节点

671. 二叉树中第二小的节点

haimian
2024-12-19 / 0 评论 / 7 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2024年12月19日,已超过122天没有更新,若内容或图片失效,请留言反馈。

给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0。如果一个节点有两个子节点的话,那么该节点的值等于两个子节点中较小的一个。

更正式地说,即 root.val = min(root.left.val, root.right.val) 总成立。

给出这样的一个二叉树,你需要输出所有节点中的 第二小的值 。

如果第二小的值不存在的话,输出 -1 。

示例 1:
m4vhhfwv.png

输入:root = [2,2,5,null,null,5,7]
输出:5
解释:最小的值是 2 ,第二小的值是 5 。
示例 2:
m4vhhjo8.png

输入:root = [2,2,2]
输出:-1
解释:最小的值是 2, 但是不存在第二小的值。

#define __min(a,b) (((a) < (b)) ? (a) : (b))
int findSecondMinimumValue(struct TreeNode* root){
    int left,right;
    if(!root->left){return -1;}
    if(root->val == (left=root->left->val) ){
        left=findSecondMinimumValue(root->left);
    }
    if(root->val == (right=root->right->val) ){
        right=findSecondMinimumValue(root->right);
    }
    return (int) __min((unsigned )left,(unsigned )right);
}

m4vhi58g.png

0

评论 (0)

取消