求根節點到葉節點數字之和
題目描述:給你一個二叉樹的根節點 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));
}
}
【每日寄語】 人生就像一場賭局,不可能把把都贏,只要籌碼在自己手上,就永遠都會有希望。