LeetCode-129-求根節點到葉節點數字之和

雄獅虎豹發表於2021-12-02

求根節點到葉節點數字之和

題目描述:給你一個二叉樹的根節點 root ,樹中每個節點都存放有一個 0 到 9 之間的數字。
每條從根節點到葉節點的路徑都代表一個數字:

  • 例如,從根節點到葉節點的路徑 1 -> 2 -> 3 表示數字 123 。
    計算從根節點到葉節點生成的 所有數字之和 。

葉節點 是指沒有子節點的節點。

示例說明請見LeetCode官網。

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/probl...
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

解法一:遞迴法

使用遞迴法解決此問題,遞迴過程如下:

  • 首先,如果當前節點為null,說明是空樹,直接返回;
  • 如果當前節點不是nll,將當前節點的值新增到 path 中;
  • 然後判斷當前節點沒有左右子節點,說明是葉子節點,將當前的路徑值加到result中,然後返回;
  • 如果當前節點的左節點不為空時,遞迴處理左節點;
  • 如果當前節點的右節點不為空時,遞迴處理右節點。

最後,返回result即為結果值。

import com.kaesar.leetcode.TreeNode;

public class LeetCode_129 {
    // 最終的累加值
    private static int result = 0;

    public static int sumNumbers(TreeNode root) {
        sumNumbers(root, "");
        return result;
    }

    /**
     * 遞迴法
     *
     * @param root
     * @param path
     */
    private static void sumNumbers(TreeNode root, String path) {
        // 如果當前節點為null,說明是空樹,直接返回
        if (root == null) {
            return;
        }
        // 將當前節點的值新增到 path 中
        path += root.val;
        // 如果當前節點沒有左右子節點,說明是葉子節點,將當前的路徑值加到result中,然後返回
        if (root.left == null && root.right == null) {
            result += Integer.valueOf(path);
            return;
        }
        if (root.left != null) {
            // 當前節點的左節點不為空時,遞迴處理左節點
            sumNumbers(root.left, path);
        }
        if (root.right != null) {
            // 當前節點的右節點不為空時,遞迴處理右節點
            sumNumbers(root.right, path);
        }
    }

    public static void main(String[] args) {
        TreeNode root = new TreeNode(4);
        root.left = new TreeNode(9);
        root.right = new TreeNode(0);
        root.left.left = new TreeNode(5);
        root.left.right = new TreeNode(1);

        // 測試用例,期望輸出: 1026
        System.out.println(sumNumbers(root));
    }
}
【每日寄語】 人生就像一場賭局,不可能把把都贏,只要籌碼在自己手上,就永遠都會有希望。

相關文章