Fork me on GitHub

Leetcode671.Second Minimum Node In a Binary Tree二叉树中的第二小结点

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

给出这样的一个二叉树,你需要输出所有节点中的第二小的值。如果第二小的值不存在的话,输出 -1 。

 

题目应该少说了树的节点值都是大于等于0的

 

class Solution {
public:
    int findSecondMinimumValue(TreeNode* root) {
        if(root == NULL)
            return -1;
        int x = GetAns(root ->left, root ->val);
        int y = GetAns(root ->right, root ->val);
        if(x == -1 && y == -1)
        {
            return -1;
        }
        else if(y == -1)
        {
            return x;
        }
        else if(x == -1)
        {
            return y;
        }
        return min(x, y);
    }

    int GetAns(TreeNode* root, int k)
    {
        if(root == NULL)
            return -1;
        if(root ->val != k)
            return root ->val;
        else
        {
            int x = GetAns(root ->left, k);
            int y = GetAns(root ->right, k);
            if(x == -1 && y == -1)
            {
                return -1;
            }
            else if(y == -1)
            {
                return x;
            }
            else if(x == -1)
            {
                return y;
            }
            return min(x, y);
        }
    }
};

 

 

posted @ 2018-11-02 21:57  lMonster81  阅读(79)  评论(0编辑  收藏  举报
/*评论*/ /*top按钮*/

/* 网易云控件 */