問題:node
Given a binary tree, return the tilt of the whole tree.post
The tilt of a tree node is defined as the absolute difference between the sum of all left subtree node values and the sum of all right subtree node values. Null node has tilt 0.spa
The tilt of the whole tree is defined as the sum of all nodes' tilt.it
Example:io
Input: 1 / \ 2 3 Output: 1 Explanation: Tilt of node 2 : 0 Tilt of node 3 : 0 Tilt of node 1 : |2-3| = 1 Tilt of binary tree : 0 + 0 + 1 = 1
Note:class
解決:二叉樹
【注】左右子樹的坡度 = | 左子樹全部節點的值的和 - 右子樹全部節點的值的和 |遍歷
① 本題要求二叉樹的坡度,某個結點的坡度的定義爲該結點的左子樹之和與右子樹之和的差的絕對值,這道題讓咱們求全部結點的坡度之和。di
採用後序遍歷,左子節點---右子節點---根節點的順序,能夠由葉節點開始處理,能夠比較方便的計算出每一個節點的累加和,同時也能夠根據子樹的和來計算坡度。co
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution { // 10 ms
int tilt = 0;
public int findTilt(TreeNode root) {
postorder(root);
return tilt;
}
public int postorder(TreeNode node){
if(node == null) return 0;
int lsum = postorder(node.left);
int rsum = postorder(node.right);
tilt += Math.abs(lsum - rsum);
return lsum + rsum + node.val; //返回的是當前節點做爲根節點的子樹的和 } }