Sum Root to Leaf Numbers -- LeetCode


原題リンク:  http://oj.leetcode.com/problems/sum-root-to-leaf-numbers/
 
これは木のテーマで、一般的に再帰を使って、主に再帰条件と終了条件を考慮します.この問題は,ルートからリーフノードまでのすべての経路から得られる整数を加算することを目標としており,再帰条件は現在のsumに10を乗じ,現在のノードを加えて次の関数に伝達し,再帰し,最終的に左右のサブツリーの総和を加算することである.終了条件は、ノードがリーフである場合、結果の合計に加算する必要があります.ノードが空のノードに達した場合、リーフノードではなく、結果に追加する必要はなく、直接0を返す必要はありません.アルゴリズムの本質は一次シーケンス遍歴であるため,時間はO(n),空間はスタックサイズ,O(logn)である.コードは次のとおりです. 
public int sumNumbers(TreeNode root) {
    return helper(root,0);
}
private int helper(TreeNode root, int sum)
{
    if(root == null)
        return 0;
    if(root.left==null && root.right==null)
        return sum*10+root.val;
    return helper(root.left,sum*10+root.val)+helper(root.right,sum*10+root.val);
}

木のテーマはLeetCodeの中でまだ比較的に大きい割合があって、しかし基本的な再帰と非再帰の遍歴を除いて、その他の大部分のテーマはすべて再帰の方式で特定量を解くので、みんなはやはり熟知しなければなりません.