当前位置: 首页 > 后端技术 > Python

力扣-0563.二叉树的坡度【Python】

时间:2023-03-26 11:36:50 Python

ProblemLeetCode给定一棵二叉树的根,返回每个树节点的倾斜度之和。树节点的倾斜度是所有左子树节点值之和与所有右子树节点值之和的绝对差子树节点值。如果一个节点没有左孩子,那么左子树节点值的总和被视为0。如果该节点没有右孩子,规则类似。示例1:输入:root=[1,2,3]输出:1解释:节点2的倾斜:|0-0|=0(没有孩子)节点3的倾斜:|0-0|=0(没有孩子)节点1的平铺:|2-3|=1(左子树只是左子树,所以和是2;右子树只是右子树,所以和是3)每个倾斜的和:0+0+1=1示例2:输入:root=[4,2,9,3,5,null,7]输出:15解释:节点3的倾斜:|0-0|=0(没有孩子)节点5的倾斜:|0-0|=0(没有孩子)节点7的倾斜:|0-0|=0(没有孩子)节点2的倾斜度:|3-5|=2(左子树就是左子树,所以s嗯是3;右子树就是右子树,所以和是5)节点9的倾斜:|0-7|=7(没有左孩子,所以和为0;右子树正好是右孩子,所以和为7)节点4的倾斜:|(3+5+2)-(9+7)|=|10-16|=6(左子树值为3、5、2,总和为10;右子树值为9和7,总和为16)每个倾斜的总和:0+0+0+2+7+6=15示例3:输入:root=[21,7,14,1,1,2,2,3,3]输出:9Constraints:树中的节点数在[0,104]范围内。-1000<=Node.val<=1000问题给定一棵二叉树,计算整棵树对于树节点的斜率斜率定义为左子树的节点之和之差的绝对值节点和右子树节点的总和。如果没有左子树,则左子树的节点之和为0;如果没有右子树,也是如此。空节点的斜率为0。整棵树的斜率是其所有节点的斜率之和。示例1:输入:root=[1,2,3]输出:1解释:节点2的斜率:|0-0|=0(没有孩子)节点3的斜率:|0-0|=0(无子节点)节点1的斜率:|2-3|=1(左子树为左子节点,所以和为2;右子树为右子节点,所以和为3)斜率之和:0+0+1=1例2:输入:root=[4,2,9,3,5,null,7]输出:15解释:节点3的斜率:|0-0|=0(没有孩子)节点5的斜率:|0-0|=0(没有孩子)节点7斜率:|0-0|=0(没有孩子)节点2斜率:|3-5|=2(左子树为左子节点,所以和为3;右子树为右子节点,所以和为5)节点9的斜率:|0-7|=7(没有左子树,所以和为0;右子树恰好是右子节点,所以和为7)节点4的斜率:|(3+5+2)-(9+7)|=|10-16|=6(左子树值为3、5和2,和为10;右子树值为9和7,和为16)斜率和:0+0+0+2+7+6=15例3:输入:root=[21,7,14,1,1,2,2,3,3]输出:9提示:树的节点数范围在[0,10^4]-1000<=Node.val<=1000思路DFS后序遍历每个节点要做什么:自己的值加上左右子树的斜率值。Python3代码#定义二叉树节点。#classTreeNode:#def__init__(self,val=0,left=None,right=None):#self.val=val#self.left=left#self.right=rightclassSolution:deffindTilt(self,root:TreeNode)->int:#顺序遍历defdfs(root):nonlocalresifnotroot:return0#ifroot.left:left=dfs(root.left)#ifroot.right:right=dfs(root.right)res+=abs(left-right)returnroot.val+left+rightres=0dfs(root)returnresGitHub链接Python