问题描述:给你一个二叉树,找出这个二叉树上所有节点的左子树上所有节点的和与有节点上所有节点的和之间差值绝对值得和。
思路:递归。
原代码:
class Solution {
public int findTilt(TreeNode root) {
if(root==null)
return 0;
return searchTilt(root)[0];
}
private int[] searchTilt(TreeNode root){
int[] result=new int[2];
int[] left=new int[2];
int[] right=new int[2];
if(root.left!=null){
left=searchTilt(root.left);
}
if(root.right!=null){
right=searchTilt(root.right);
}
if(root.left==null&&root.right==null){
result[0]=0;
result[1]=root.val;
return result;
}
result[0]=left[0]+right[0]+Math.abs(left[1]-right[1]);
result[1]=left[1]+right[1]+root.val;
return result;
}
}
最佳答案:
int result = 0;
public int findTilt(TreeNode root) {
travelTree(root);
return result;
}
public int travelTree(TreeNode root){
if (root == null) return 0;
int left = travelTree(root.left);
int right = travelTree(root.right);
result = result + Math.abs(left - right);
return root.val + left + right;
}
很简单的递归,就是没有想到可以这么写。