想法:每一个父结点需要知道其左右结点的总和才能去算该结点的斜率,决定了必须采用后序遍历的方式,在遍历的过程中去把斜率相加
根据递归三部曲:
确立函数的返回值和参数 返回值为该结点的总和
确认终止条件 if(root==NULL)return 0;
确认单层逻辑 该结点的总和=该结点左右孩子的总和+该结点的值
code:
/**
* 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 {
private:
int slopesum;
int slopetraversal(TreeNode* root)
{
if(!root)return 0;
int left=slopetraversal(root->left);
int right=slopetraversal(root->right);
slopesum+=abs(left-right);
return left+right+root->val;
}
public:
int findTilt(TreeNode* root) {
slopesum=0;
slopetraversal(root);
return slopesum;
}
};