劍指offer----二叉樹中和為某一值的路徑

題目輸入一顆二叉樹和一個整數(shù),打印出二叉樹中結(jié)點值的和為輸入整數(shù)的所有路徑。路徑定義為從樹的根結(jié)點開始往下一直到葉結(jié)點所經(jīng)過的結(jié)點形成一條路徑。

/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/

分析題目:

  • 某個路徑上的節(jié)點的和為輸入的數(shù)。
  • 看到了路徑,想到了深度優(yōu)先遍歷,這一定是一道深度優(yōu)先遍歷的題。
  • 既然是深度優(yōu)先遍歷,那應該使用?;蛘哌f歸。

那么就會產(chǎn)生下面幾個問題:

  • 如何存儲路徑上的和的值
  • 如果使用遞歸,終止條件的選擇
  • 如果發(fā)現(xiàn)一個路徑與符合題意,如果將其放入ArrayList中
  • 多個符合條件的路徑公用一些節(jié)點
public class Solution {
    private ArrayList<ArrayList<Integer>> arrayLists = new ArrayList<>();//存儲結(jié)果
    private ArrayList<Integer> array = new ArrayList<>();//用于存儲當前調(diào)用棧的節(jié)點,遞歸結(jié)束節(jié)點自動刪去。
    public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
        if(root == null){
            return arrayLists;//結(jié)束
        }
        array.add(root.val);//將本節(jié)點的值加入array中
        target -= root.val; //target減去該路徑中每層節(jié)點的值
        if(target == 0 && root.left == null && root.right == null){//符合題意的條件
            arrayLists.add(new ArrayList<>(array));//將該路徑加入到結(jié)果中
        }
        FindPath(root.left, target);//左子節(jié)點遞歸
        FindPath(root.right, target);//右子節(jié)點遞歸
        array.remove(array.size() - 1);//從array中移除本層節(jié)點,保證array中的永遠保存的是執(zhí)行體所在的節(jié)點以上的路徑。保證數(shù)據(jù)清潔,
        return arrayLists;//返回值僅用于最后的返回條件,無時間邏輯意義
    }
}

可以說,這是我刷題以來見過的最棒的一個代碼了,從這里面學了很多知識

  • 無用的數(shù)據(jù)及時刪除,可以保證整個數(shù)據(jù)的整潔。
  • 當需要記錄很多個array時,可以通過構(gòu)造參數(shù)復制公共array,之后公共array仍可以安全的更新
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 數(shù)據(jù)結(jié)構(gòu)和算法--二叉樹的實現(xiàn) 幾種二叉樹 1、二叉樹 和普通的樹相比,二叉樹有如下特點: 每個結(jié)點最多只有兩棵子...
    sunhaiyu閱讀 6,705評論 0 14
  • 四、樹與二叉樹 1. 二叉樹的順序存儲結(jié)構(gòu) 二叉樹的順序存儲就是用數(shù)組存儲二叉樹。二叉樹的每個結(jié)點在順序存儲中都有...
    MinoyJet閱讀 1,736評論 0 7
  • 【不忘初心】20171116學習力踐行day37:1.識字:繼續(xù)古詩叫醒《敕勒歌》、《游子吟》,昨晚算是第一次畫日...
    Tiffanyzj閱讀 183評論 0 0
  • 阿香:教練,我老公現(xiàn)在沒工作,總是依賴我,經(jīng)常找我拿錢,我挺煩的, 教練:煩什么? 阿香:他干嘛自己不長進,自己去...
    療愈師李玉閱讀 359評論 0 0

友情鏈接更多精彩內(nèi)容