劍指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)先遍歷鸿市,那應(yīng)該使用棧或者遞歸即碗。

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

  • 如何存儲路徑上的和的值
  • 如果使用遞歸焰情,終止條件的選擇
  • 如果發(fā)現(xiàn)一個路徑與符合題意,如果將其放入ArrayList中
  • 多個符合條件的路徑公用一些節(jié)點
public class Solution {
    private ArrayList<ArrayList<Integer>> arrayLists = new ArrayList<>();//存儲結(jié)果
    private ArrayList<Integer> array = new ArrayList<>();//用于存儲當(dāng)前調(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中的永遠(yuǎn)保存的是執(zhí)行體所在的節(jié)點以上的路徑蕊肥。保證數(shù)據(jù)清潔谒获,
        return arrayLists;//返回值僅用于最后的返回條件,無時間邏輯意義
    }
}

可以說壁却,這是我刷題以來見過的最棒的一個代碼了批狱,從這里面學(xué)了很多知識

  • 無用的數(shù)據(jù)及時刪除,可以保證整個數(shù)據(jù)的整潔展东。
  • 當(dāng)需要記錄很多個array時赔硫,可以通過構(gòu)造參數(shù)復(fù)制公共array,之后公共array仍可以安全的更新
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末盐肃,一起剝皮案震驚了整個濱河市爪膊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌砸王,老刑警劉巖推盛,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異谦铃,居然都是意外死亡耘成,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瘪菌,“玉大人撒会,你說我怎么就攤上這事∈γ睿” “怎么了诵肛?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長疆栏。 經(jīng)常有香客問我曾掂,道長惫谤,這世上最難降的妖魔是什么壁顶? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮溜歪,結(jié)果婚禮上若专,老公的妹妹穿的比我還像新娘。我一直安慰自己蝴猪,他們只是感情好调衰,可當(dāng)我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著自阱,像睡著了一般嚎莉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上沛豌,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天趋箩,我揣著相機與錄音,去河邊找鬼加派。 笑死叫确,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的芍锦。 我是一名探鬼主播竹勉,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼娄琉!你這毒婦竟也來了次乓?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤孽水,失蹤者是張志新(化名)和其女友劉穎票腰,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體匈棘,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡丧慈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逃默。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡鹃愤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出完域,到底是詐尸還是另有隱情软吐,我是刑警寧澤,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布吟税,位于F島的核電站凹耙,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏肠仪。R本人自食惡果不足惜肖抱,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望异旧。 院中可真熱鬧意述,春花似錦、人聲如沸吮蛹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽潮针。三九已至术荤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間每篷,已是汗流浹背瓣戚。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留雳攘,地道東北人带兜。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像吨灭,于是被迫代替她去往敵國和親刚照。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內(nèi)容

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