Leetcode 129 求根到葉子節點數字之和 DFS優化
阿新 • • 發佈:2020-07-14
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); }