1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

        共 3004字,需瀏覽 7分鐘

         ·

        2020-12-06 20:45

        算法的重要性,我就不多說了吧,想去大廠,就必須要經(jīng)過基礎知識和業(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));
        ????}
        }


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


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

        瀏覽 23
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

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

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            日日夜夜做爱 | 黄色小说在线观看免费 | 成人三级片网站 | 爱搞在线播放 | 蜜桃性视频| 羞羞视频最新地址发布页 | 男人吃女人胸的视频 | 白丝美女喷水 | 中文字幕日韩人妻在线看视频 | 国产富婆按摩高潮大叫 |