给定一个二叉树,返回整棵树的倾斜程度。
一个节点的倾斜程度定义:左子树的所有节点和,与右子树所有节点和的绝对值差。空节点的倾斜程度定义为0。
整棵树的倾斜程度定义:所有节点的倾斜程度之和。
样例
样例 1:
输入:
{1,2,3}
输出: 1
解释:
1
/ \
2 3
节点2的倾斜程度 : 0
节点3的倾斜程度 : 0
节点1的倾斜程度 : |2-3| = 1
整棵树的倾斜程度 : 0 + 0 + 1 = 1
**样例 2: **
输入:
{1,1,#,2,3}
输出:
7
解释:
1
/
1
/ \
2 3
注意事项
- 任何子树的所有节点和不会超过32位整数的范围。
- 所有的倾斜程度值,不会超过32位整数的范围。
解题思路:
本身对递归理解就不深,所以这道题也是翻看了很多其他人的博客得出来的解,需要加强理解。
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
public class Solution {
/**
* @param root: the root
* @return: the tilt of the whole tree
*/
public int findTilt(TreeNode root) {
// Write your code here
helper(root);
return res;
}
private int res = 0;
//返回以root为根的节点和
public int helper(TreeNode root){
if(root == null)
return 0;
int left = helper(root.left);
int right = helper(root.right);
res += Math.abs(left - right);
return left + right + root.val;
}
}