zoukankan      html  css  js  c++  java
  • 671. 二叉树中第二小的节点 二叉树 dfs

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

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

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

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/second-minimum-node-in-a-binary-tree
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
     *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
     *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
     * };
     */
    class Solution {
    public:
        int findSecondMinimumValue(TreeNode* root) {
            // 转化为求左右子树的最小值
            return dfs(root, root->val);
        }
    
        int dfs(TreeNode* root, int value) {
            // 叶节点
            if (!root) {
                return -1;
            }
            // 若当前节点值>根节点,则直接返回它的值
            if (root->val > value) {
                return root->val;
            }
            // 否则当前节点值必等于根节点
            // 此时要在左右子树寻找目标节点
            int l = dfs(root->left, value);
            int r = dfs(root->right, value);
    
            // 若左右子树均存在大于最小值的节点,则返回较小的那个,因为要的是第二小
            if (l > 0 && r > 0) {
                return min(l, r);
            }
            // 否则返回较大的那个
            return max(l, r);
        }
    };
    
  • 相关阅读:
    Java上等价类划分测试的实现
    软件测试の因果图法的测试运用
    display: block; 和 display: inline; 的区别
    CSS实现垂直居中
    CSS中实现水平居中
    HTTP头部信息
    HTTP PUT方法和POST方法的区别
    理解 ajax xhr jsonp
    深入理解JavaScript系列
    Angular 1.x 指令笔记
  • 原文地址:https://www.cnblogs.com/xgbt/p/15065702.html
Copyright © 2011-2022 走看看