碼上生花,echarts 作品展示賽正式啟動!>>>
給定乙個二叉樹和乙個目標和,找到所有從根節點到葉子節點路徑總和等於給定目標和的路徑。
說明: 葉子節點是指沒有子節點的節點。
示例: 給定如下二叉樹,以及目標和 sum = 22,
5
/ 4 8
/ /
11 13 4
/ /
7 2 5 1
返回:
[
[5,4,11,2],
[5,8,4,5]
]
本題使用遞迴+回溯的思想dfs
遍歷整個二叉樹求出每條目標路徑
首先建立ans
結果集用來接收找到的目標路徑,然後定義遞迴方法path
尋找每條路徑上滿足題意的路徑
考慮特殊情況:只有根節點或者遍歷到了葉子結點的時候,就將該臨時路徑陣列tmp
放入結果集中(每次都初始路徑tmp
)
其他情況就按照遞迴的方法依次遍歷左右子樹各個結點
所有遍歷結束返回結果集ans
即可。
/**
* definition for a binary tree node.
* public class treenode
* }*/class solution
// 傳入4個引數來完成路徑的存放和搜尋
private void path(treenode root, int sum, list> ans, arraylisttmp)
tmp.add(root.val);
// 如果只有根節點或只有葉子結點,則直接放入 ans 中
if (root.left == null && root.right == null && sum == root.val)
path(root.left, sum - root.val, ans, tmp);
path(root.right, sum - root.val, ans, tmp);
// 這裡利用了回溯的思想:每次回退上乙個節點再尋找另一條邊的節點作為新路徑
tmp.remove(tmp.size() - 1);}}
LeetCode112 路徑總和
給定乙個二叉樹和乙個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。說明 葉子節點是指沒有子節點的節點。示例 給定如下二叉樹,以及目標和sum 22,5 48 1113 4 721返回true,因為存在目標和為 22 的根節點到葉子節點的路徑5 4 11 2。遍...
LeetCode 112 路徑總和
給定乙個二叉樹和乙個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。說明 葉子節點是指沒有子節點的節點。示例 給定如下二叉樹,以及目標和 sum 22,5 4 8 11 13 4 7 2 1 返回 true,因為存在目標和為 22 的根節點到葉子節點的路徑 5 ...
Leetcode 112 路徑總和
給定乙個二叉樹和乙個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。說明 葉子節點是指沒有子節點的節點。示例 給定如下二叉樹,以及目標和sum 22,5 48 1113 4 721 返回true,因為存在目標和為 22 的根節點到葉子節點的路徑5 4 11 2。...