<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          ?LeetCode刷題實戰(zhàn)113:路徑總和 II

          共 3004字,需瀏覽 7分鐘

           ·

          2020-12-06 20:45

          算法的重要性,我就不多說了吧,想去大廠,就必須要經(jīng)過基礎(chǔ)知識和業(yè)務邏輯面試+算法面試。所以,為了提高大家的算法能力,這個公眾號后續(xù)每天帶大家做一道算法題,題目就從LeetCode上面選 !

          今天和大家聊的問題叫做?路徑總和 II,我們先來看題面:
          https://leetcode-cn.com/problems/path-sum-ii/
          Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum.

          Note: A leaf is a node with no children.

          題意


          給定一個二叉樹和一個目標和,找到所有從根節(jié)點到葉子節(jié)點路徑總和等于給定目標和的路徑。
          說明: 葉子節(jié)點是指沒有子節(jié)點的節(jié)點。

          樣例

          解題

          https://www.yuque.com/zhoujx/study/lc112

          方法一:深度優(yōu)先搜索

          我們可以采用深度優(yōu)先搜索的方式,枚舉每一條從根節(jié)點到葉子節(jié)點的路徑。當我們遍歷到葉子節(jié)點,且此時路徑和恰為目標和時,我們就找到了一條滿足條件的路徑。


          class?Solution?{
          ????List<List> ret = new?LinkedList<List>();
          ????Deque path = new?LinkedList();

          ????public?List<List> pathSum(TreeNode root, int sum) {
          ????????dfs(root, sum);
          ????????return?ret;
          ????}

          ????public?void dfs(TreeNode root, int sum) {
          ????????if?(root == null) {
          ????????????return;
          ????????}
          ????????path.offerLast(root.val);
          ????????sum -= root.val;
          ????????if?(root.left == null?&& root.right == null?&& sum == 0) {
          ????????????ret.add(new?LinkedList(path));
          ????????}
          ????????dfs(root.left, sum);
          ????????dfs(root.right, sum);
          ????????path.pollLast();
          ????}
          }


          方法二:廣度優(yōu)先搜索


          我們也可以采用廣度優(yōu)先搜索的方式,遍歷這棵樹。當我們遍歷到葉子節(jié)點,且此時路徑和恰為目標和時,我們就找到了一條滿足條件的路徑。

          為了節(jié)省空間,我們使用哈希表記錄樹中的每一個節(jié)點的父節(jié)點。每次找到一個滿足條件的節(jié)點,我們就從該節(jié)點出發(fā)不斷向父節(jié)點迭代,即可還原出從根節(jié)點到當前節(jié)點的路徑。


          class?Solution?{
          ????List> ret = new?LinkedList>();
          ????Map map = new?HashMap();

          ????public?List> pathSum(TreeNode root, int?sum) {
          ????????if?(root == null) {
          ????????????return?ret;
          ????????}

          ????????Queue queueNode = new?LinkedList();
          ????????Queue queueSum = new?LinkedList();
          ????????queueNode.offer(root);
          ????????queueSum.offer(0);

          ????????while?(!queueNode.isEmpty()) {
          ????????????TreeNode node = queueNode.poll();
          ????????????int?rec = queueSum.poll() + node.val;

          ????????????if?(node.left == null?&& node.right == null) {
          ????????????????if?(rec == sum) {
          ????????????????????getPath(node);
          ????????????????}
          ????????????} else?{
          ????????????????if?(node.left != null) {
          ????????????????????map.put(node.left, node);
          ????????????????????queueNode.offer(node.left);
          ????????????????????queueSum.offer(rec);
          ????????????????}
          ????????????????if?(node.right != null) {
          ????????????????????map.put(node.right, node);
          ????????????????????queueNode.offer(node.right);
          ????????????????????queueSum.offer(rec);
          ????????????????}
          ????????????}
          ????????}

          ????????return?ret;
          ????}

          ????public?void?getPath(TreeNode node) {
          ????????List temp = new?LinkedList();
          ????????while?(node != null) {
          ????????????temp.add(node.val);
          ????????????node = map.get(node);
          ????????}
          ????????Collections.reverse(temp);
          ????????ret.add(new?LinkedList(temp));
          ????}
          }


          好了,今天的文章就到這里,如果覺得有所收獲,請順手點個在看或者轉(zhuǎn)發(fā)吧,你們的支持是我最大的動力。


          上期推文:
          LeetCode1-100題匯總,希望對你有點幫助!
          LeetCode刷題實戰(zhàn)101:對稱二叉樹
          LeetCode刷題實戰(zhàn)102:二叉樹的層序遍歷
          LeetCode刷題實戰(zhàn)103:二叉樹的鋸齒形層次遍歷
          LeetCode刷題實戰(zhàn)104:二叉樹的最大深度
          LeetCode刷題實戰(zhàn)105:從前序與中序遍歷序列構(gòu)造二叉樹
          LeetCode刷題實戰(zhàn)106:從中序與后序遍歷序列構(gòu)造二叉樹
          LeetCode刷題實戰(zhàn)107:二叉樹的層次遍歷 II
          LeetCode刷題實戰(zhàn)108:將有序數(shù)組轉(zhuǎn)換為二叉搜索樹
          LeetCode刷題實戰(zhàn)109:有序鏈表轉(zhuǎn)換二叉搜索樹
          LeetCode刷題實戰(zhàn)110:平衡二叉樹
          LeetCode刷題實戰(zhàn)111:二叉樹的最小深度
          LeetCode刷題實戰(zhàn)112:路徑總和

          瀏覽 23
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  麻豆传媒肏逼视频 | 国产 精品 探花 熟女 | 青青草大香蕉超碰 | 大香蕉在线观看一区免费 | 黄色视频在线观看www |