本来是一道简单题,但是Go版本不知怎的,内部逻辑正确,就是结果不对,之前也存在这种情况,一般都是在定义全局变量之后存在这种现象,可能是内存泄露?java在类里面定义没有任何异常,很迷
解题思路:通过计算每个节点的坡度,即计算左右节点和的差值的绝对值,递归即可实现
java版本:
class Solution {
int ans;
public int findTilt(TreeNode root) {
if(root==null){
return 0;
}
calulate(root);
return ans;
}
public int calulate(TreeNode root){
if(root==null){
return 0;
}
int l=calulate(root.left),r=calulate(root.right);
ans+=Math.abs(l-r);
return l+r+root.val;
}
}
Go版本
import "fmt"
// var res_value int=0;
// var left_value int=0;
// var right_value int=0;
func findTilt(root *TreeNode) int {
// 二叉树遍历
if root==nil{
return 0
}
return findTilt(root.Left)+findTilt(root.Right)+abs(calulate(root.Left),calulate(root.Right))
}
func abs(num1 int, num2 int)int{
if num1>num2{
return num1-num2
}
return num2-num1
}
func calulate(root *TreeNode)int{
if root==nil{
return 0;
}
return calulate(root.Left)+calulate(root.Right)+root.Val
}
网友评论