1. 程式人生 > 實用技巧 >Leetcode 129 求根到葉子節點數字之和 DFS優化

Leetcode 129 求根到葉子節點數字之和 DFS優化

  DFS 解法,通過回溯一個 StringBuilder 記錄下所有路徑代表的數字並求和:

    StringBuilder sb = new StringBuilder();
    int re = 0;

    public int sumNumbers(TreeNode root) {
        if (root == null) {
            return 0;
        }
        getNums(root);
        return re;
    }

    public void getNums(TreeNode root) {
        
if (root.right == null && root.left == null) { sb.append(root.val); Integer num = Integer.valueOf(sb.toString()); re += num; sb.deleteCharAt(sb.length() - 1); return; } sb.append(root.val); if (root.left != null
) { getNums(root.left); } if (root.right != null) { getNums(root.right); } sb.deleteCharAt(sb.length() - 1); }

  本著上面的思路,進行 DFS 表示的優化。只考慮單個節點可能遇到的情況:

  1、為葉子節點,直接返回該節點的值

  2、存在子節點,返回當前節點乘10分別加左右子節點並求和

    public final int sumNumbers0(TreeNode root) {
        
return getNums(root, 0); } public final int getNums(TreeNode root, int preSum) { if (root == null) { return 0; } int sum = preSum * 10 + root.val; if (root.left == null && root.right == null) { return sum; } return getNums(root.right, sum) + getNums(root.left, sum); }