力扣563-二叉树坡度
笔者是刷热题的同时在自己比较薄弱的tag里从简单题开始刷,昨晚被这道题卡死了 ,记录一下
要点: 要求左右子树的坡度和,而不是左右子树的差值,考虑到多层的情况一定要使用递归的写法(当然递归也有非递归的表示方式 ) ,所以以一个节点为例,返回的不应该是它自身的节点值,而应该是左右子树坡度和它自身的节点值之和,这样上一层才能直接得到它的(左/右)节点之和
class Solution {
int all; //用于累加每个节点坡度
public:
int findTilt(TreeNode* root) {
bianli(root);
return all;
}
int bianli(TreeNode *root)
{
if(root==NULL)
return 0;
int leftnum=bianli(root->left);
int rightnum=bianli(root->right);
all+=abs(rightnum-leftnum);
return root->val+leftnum+rightnum; //得到左/右子树节点和
}
};