二叉樹路徑節(jié)點關鍵值和等于目標值(LeetCode--112&LeetCode--113)

題目

給定一個二叉樹和一個目標和,判斷該樹中是否存在根節(jié)點到葉子節(jié)點的路徑漓柑,這條路徑上所有節(jié)點值相加等于目標和。


摘自LeetCode112

解題方法

遞歸實現(xiàn)
目標sum值減去根節(jié)點的關鍵值叨吮,結果分別是根節(jié)點的左右子樹的目標和辆布。對左右子樹遞歸調用函數(shù),直到樹葉節(jié)點為止茶鉴。

代碼

public boolean hasPathSum(TreeNode root, int sum) {
    if(null == root){//根節(jié)點為空锋玲,則返回false
        return false;
    }
    //直到樹葉節(jié)點,如果關鍵值等于遞歸傳入的sum值涵叮,則返回true
    if(null == root.left && null == root.right && root.val == sum){
        return true;
    }
    //非樹葉節(jié)點惭蹂,對左右子樹遞歸調用函數(shù)
    //目標和要減去當前節(jié)點的關鍵值
    boolean l = hasPathSum(root.left, sum - root.val);
    boolean r = hasPathSum(root.right, sum - root.val);
    return l || r;
}

拓展題目

如果題目要求不是判斷是否存在這條路徑,而是返回滿足條件的路徑割粮?(LeetCode113)

拓展題目解析

  1. 與上一題思路一樣盾碗,區(qū)別在于遞歸不再返回是否存在路徑,而是需要記錄遍歷過的節(jié)點舀瓢。
  2. 實現(xiàn)中我們在遞歸函數(shù)中傳入用于存儲遍歷過節(jié)點的隊列結構廷雅。
  3. 同時,因為遞歸是先遍歷左子樹再遍歷右子樹,只有左子樹遞歸到樹葉節(jié)點之后才會開始遍歷右子樹航缀,那么我們可以僅僅使用同一個隊列進行參數(shù)傳遞商架,在每個節(jié)點的左右子樹遞歸遍歷之后,移除當前的節(jié)點芥玉,這樣可以減少不斷構建新隊列所帶來的性能消耗蛇摸。

拓展題目代碼

public List<List<Integer>> pathSum(TreeNode root, int sum) {
    List<List<Integer>> result = new ArrayList<>();
    List<Integer> list = new ArrayList<>();
    pathSumHelper(root, sum, result, list);
    return result;
}
//遞歸尋找存在的路徑
private void pathSumHelper(TreeNode root, int sum, 
                List<List<Integer>> result, List<Integer> list){
    if(null == root){
        return;
    }
    if(null == root.left && null == root.right && sum == root.val){
        //遍歷到樹葉節(jié)點如果符合條件,存入隊列中
        list.add(root.val);
        //復制一個新的隊列存入結果隊列中
        result.add(new ArrayList<Integer>(list));
        //移除當前節(jié)點灿巧,其他遍歷分支繼續(xù)使用這個隊列
        list.remove(list.size() - 1);
        return;
    }
    //遍歷到非樹葉節(jié)點赶袄,存入隊列中
    list.add(root.val);
    //遞歸左子樹與右子樹
    pathSumHelper(root.left, sum - root.val, result, list);
    pathSumHelper(root.right, sum - root.val, result, list);
    //移除當前節(jié)點,其他遍歷分支繼續(xù)使用這個隊列
    list.remove(list.size() - 1);
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末砸烦,一起剝皮案震驚了整個濱河市弃鸦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌幢痘,老刑警劉巖唬格,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異颜说,居然都是意外死亡购岗,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門门粪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喊积,“玉大人,你說我怎么就攤上這事玄妈∏牵” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵拟蜻,是天一觀的道長绎签。 經(jīng)常有香客問我,道長酝锅,這世上最難降的妖魔是什么诡必? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮搔扁,結果婚禮上爸舒,老公的妹妹穿的比我還像新娘。我一直安慰自己稿蹲,他們只是感情好扭勉,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著苛聘,像睡著了一般剖效。 火紅的嫁衣襯著肌膚如雪嫉入。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天璧尸,我揣著相機與錄音咒林,去河邊找鬼。 笑死爷光,一個胖子當著我的面吹牛垫竞,可吹牛的內容都是我干的。 我是一名探鬼主播蛀序,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼欢瞪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了徐裸?” 一聲冷哼從身側響起遣鼓,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎重贺,沒想到半個月后骑祟,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡气笙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年次企,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片潜圃。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡缸棵,死狀恐怖,靈堂內的尸體忽然破棺而出谭期,到底是詐尸還是另有隱情堵第,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布隧出,位于F島的核電站型诚,受9級特大地震影響,放射性物質發(fā)生泄漏鸳劳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一也搓、第九天 我趴在偏房一處隱蔽的房頂上張望赏廓。 院中可真熱鬧,春花似錦傍妒、人聲如沸幔摸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽既忆。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間患雇,已是汗流浹背跃脊。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留苛吱,地道東北人酪术。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像翠储,于是被迫代替她去往敵國和親绘雁。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內容

  • 這篇文章總結了一下這兩天刷的二叉樹的解題方法援所,主要是遞歸庐舟、迭代的DFS、迭代的BSF這三種住拭。題目列表如下: 題目列...
    不要甜的紅燒肉閱讀 495評論 0 0
  • 程序設計中常使用樹型結構來表征某些數(shù)據(jù)的關聯(lián)關系挪略,如上下級、欄目結構废酷、商品分類瘟檩、菜單、回復等澈蟆。 分類的層級關系可以...
    JunChow520閱讀 4,098評論 4 3
  • 題目描述 給定一個二叉樹和一個目標和墨辛,判斷該樹中是否存在根節(jié)點到葉子節(jié)點的路徑,這條路徑上所有節(jié)點值相加等于目標和...
    topshi閱讀 267評論 0 2
  • 做題趴俘,實際寫出例子睹簇,然后分析可能遇到的情況,慢慢的寥闪,思路就會出來了太惠。 線性表 33. Search in Rota...
    小碧小琳閱讀 1,594評論 0 2
  • 前言 2. 實現(xiàn) Singleton 3. 數(shù)組中重復的數(shù)字 4. 二維數(shù)組中的查找 5. 替換空格 6. 從尾到...
    Observer_____閱讀 2,930評論 0 1