二叉樹的坡度(左子樹節點和-右子樹節點和)Binary Tree Tilt

問題: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

  1. The sum of node values in any subtree won't exceed the range of 32-bit integer.
  2. All the tilt values won't exceed the range of 32-bit integer.

解決:二叉樹

【注】左右子樹的坡度 = | 左子樹全部節點的值的和 - 右子樹全部節點的值的和 |遍歷

① 本題要求二叉樹的坡度某個結點的坡度的定義爲該結點的左子樹之和與右子樹之和的差的絕對值這道題讓咱們求全部結點的坡度之和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; //返回的是當前節點做爲根節點的子樹的和     } }

相關文章
相關標籤/搜索