/*
題目描述
輸入一顆二叉樹和一個整數,打印出二叉樹中結點值的和爲輸入整數的所有路徑。路徑定義爲從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。
*/
public class Solution
{
//解題思路:
//每一次執行過程都相似,且是樹結構.因此用遞歸解決 回溯!!!!. 每一次添加節點的時候,就讓target - node.value
//遞歸出口: 失敗: 遍歷到葉節點 且沒有滿足條件 target != 0 就返回.
//成功: 遍歷到葉節點 並且滿足條件 target == 0;
private ArrayList<ArrayList<Integer>> ret = new ArrayList<>();
public ArrayList<ArrayList<Integer>> findPath(TreeNode root,int target)
{
backtracking(root,target,new ArrayList<Integer>());
return ret;
}
private void backtracking(TreeNode node, int target,ArrayList<Integer> path)
{
//排除掉空的節點
if (node == null)
return;
//更新target
path.add(node.value);
target = target - node.value;
//遞歸出口
if (target == 0 && node.left == null && node.right == null)
{
ret.add(path);
}
else
{
backtracking(node.left,target,path);
backtracking(node.right,target,path);
}
//node的所有左右子樹都不行的話,就從paht中移除 node 並且返回上一級.
path.remove(path.size() - 1);
}
}
《劍指offer》NO34 二叉樹中和爲某一值的路徑 詳解 <Java實現>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.