Leetcode.563 Binary Tree Tilt

題目求的是整個樹的tilt的值而不是單個node節(jié)點的tilt值,可以通過example看出來。

分析:
一看到樹,就想到用recursion。
最小子問題是,求一個節(jié)點的tilt值。
想到大概是這個形式
Math.abs(helper(root.left) - helper(root.right))
分析下怎么寫function,
傳入當前節(jié)點的值: 就是當前節(jié)點TreeNode root
返回的值: 當前節(jié)點值加上其所有子樹值之和
需要操作的,
求出左子樹之和
求出右子樹之和
得到相減的絕對值即是tilt

需要存tilt,java不像c/c++可以用一個int 變量的指針,比如傳入一個int &tilt來做,所以可以用一個全局變量來代替。
這里在class中的定義內部private變量tilt,每次操作 tilt += Math.abs(helper(root.left) - helper(root.right));
當我們調用helper(即traverse)之后,在整個樹的所有子節(jié)點都跑過一遍,這樣就能得到整個樹的tilt值之和,作為結果返回就完成了。

另外,high level來看,是一個post-order traversal問題。
先traverse左
再traverse右
最后加上當前節(jié)點值,返回

思考:
如何用iterative的方式解決

public class Solution {
    int tilt = 0;
    
    public int findTilt(TreeNode root) {
        traverse(root);
        return tilt;
    }
    
    private int traverse(TreeNode root)
    {
        if(root == null) {
            return 0;
        }

        int left = traverse(root.left);
        int right = traverse(root.right);
        
        tilt += Math.abs(left - right);
        return left + right + root.val;
    }
}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容