力扣刷题——1448——统计二叉树中好节点的数目

给你一棵根为 root 的二叉树,请你返回二叉树中好节点的数目。

「好节点」X 定义为:从根到该节点 X 所经过的节点中,没有任何节点的值大于 X 的值。

示例 1:

力扣刷题——1448——统计二叉树中好节点的数目_第1张图片

输入:root = [3,1,4,3,null,1,5]
输出:4
解释:图中蓝色节点为好节点。
根节点 (3) 永远是个好节点。
节点 4 -> (3,4) 是路径中的最大值。
节点 5 -> (3,4,5) 是路径中的最大值。
节点 3 -> (3,1,3) 是路径中的最大值。

解题思路:递归地遍历二叉树的每个节点。在遍历过程中,我们需要记录从根节点到当前节点路径上的最大值,通过比较当前节点的值和这个最大值,判断当前节点是否为好节点,如果当前节点为好节点,则将答案+1。同时,对左右子树分别进行递归计算,最后汇总结果。

 int goodNodes(TreeNode* root,int mx=INT_MIN) {
       
        if(!root)
        {
            return 0;
        }
        int left=goodNodes(root->left,max(mx,root->val));
        int right=goodNodes(root->right,max(mx,root->val));
        return left+right+(root->val>=mx);
    }

复杂度分析

  • 时间复杂度:(O(n),其中 n 是二叉树中的节点数。因为每个节点都需要被访问一次。
  • 空间复杂度:O(h),其中 h 是二叉树的高度。递归调用栈的深度取决于树的高度,最坏情况下二叉树退化为链表,空间复杂度为 (O(n)。

你可能感兴趣的:(leetcode,算法,职场和发展)