題目描述:
輸入一棵二叉樹和一個整數,打印出二叉樹中節點值的和爲輸入整數的所有路徑。從樹的根節點開始往下一直到葉節點所經過的節點形成一條路徑。
思路分析:
採用先序遍歷思想,當遇到第1個結點curr,用sum-curr.val,然後將curr.val放入列表path中,噹噹前結點爲葉子結點況且sum=0,將path加入結果集合中。否則將刪除path的最後一個結點。結束本輪遞歸,進行下次遞歸。
參考代碼:
private List<List<Integer>> res= new LinkedList<>();
private LinkedList<Integer> path = new LinkedList<>();
public List<List<Integer>> pathSum(TreeNode root, int sum) {
if(root == null)return res;
dfs(root, sum);
return res;
}
public void dfs(TreeNode root, int sum){
if(root == null)return;
path.add(root.val);
sum -= root.val;
if(root.left == null && root.right == null && sum == 0)
res.add(new LinkedList(path));
dfs(root.left, sum);
dfs(root.right, sum);
path.removeLast();
}
(完)