uacs2024

导航

leetcode563. 二叉树的坡度。

563. 二叉树的坡度

 

二叉树大部分题目都可以用递归解决。为了满足一般性,即使题目初试没有的情况,子问题有的,也要考虑。

递归就考虑当前的情况就行了,不要再考虑上一层或者下一层。

下面这个做法是把计算值和、计算坡度分开,时间复杂度n^2,一开始做的时候就一直在想n的情况,就没有写出来。

class Solution {
public:
    int sum(TreeNode* root)
    {
        if(root==nullptr) return 0;
        return root->val+sum(root->left)+sum(root->right);
    }
    int findTilt(TreeNode* root) {
        if(root==nullptr) return 0;
        return abs(sum(root->left)-sum(root->right))+findTilt(root->left)+findTilt(root->right);
    }
};

下面是时间效率最高的解法:

class Solution {
public:
    int res=0;
    int dfs(TreeNode* root)
    {
        if(root==nullptr) return 0;
        int left=dfs(root->left);
        int right=dfs(root->right);
        res+=abs(left-right);
        return root->val+left+right;
    }
    int findTilt(TreeNode* root)
    {
        dfs(root);
        return res;
    }
};

 

posted on 2022-11-22 16:28  ᶜʸᵃⁿ  阅读(14)  评论(0编辑  收藏  举报