解题思路:
对于二叉树我们不用过分纠结全部的二叉树我们该如何如何处理,我们只需要截取其中的一棵子树单独拿出来分析,思路清晰之后再进行递归那就好理解了,我们用dfs思想
1,对于节点14,其节点的坡度就是左子树的总和减去右子树的总和
2,用dfs就是回溯,那么节点14应该向上返回什么呢?---节点14的左右子树和加上其自身的节点值
理解了上述两个步骤,那么解题就简单了
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int findTilt(struct TreeNode* root)
{
if(root == NULL)
return 0;
int slopeSum = 0;
slopeFunc(root,&slopeSum);
return slopeSum;
}
int slopeFunc(struct TreeNode *root, int *slopeSum)
{
if(root == NULL)
return 0;
int leftSum = slopeFunc(root->left,slopeSum);
int rightSum = slopeFunc(root->right,slopeSum);
*slopeSum += abs(leftSum - rightSum); //求每个节点的坡度,然后累加到slopeSum
return leftSum + rightSum + root->val; //向上返回的是该节点的左右子树和加上本身的节点值
}
提交结果: