<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)107:二叉樹的層次遍歷 II

          共 1962字,需瀏覽 4分鐘

           ·

          2020-11-26 21:57

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

          今天和大家聊的問題叫做?二叉樹的層次遍歷 II,我們先來看題面:

          https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii/

          Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).

          題意


          給定一個二叉樹,返回其節(jié)點值自底向上的層次遍歷。(即按從葉子節(jié)點所在層到根節(jié)點所在的層,逐層從左向右遍歷)

          樣例


          解題


          樹的層次遍歷可以使用廣度優(yōu)先搜索實現(xiàn)。從根節(jié)點開始搜索,每次遍歷同一層的全部節(jié)點,使用一個列表存儲該層的節(jié)點值。

          如果要求從上到下輸出每一層的節(jié)點值,做法是很直觀的,在遍歷完一層節(jié)點之后,將存儲該層節(jié)點值的列表添加到結(jié)果列表的尾部。這道題要求從下到上輸出每一層的節(jié)點值,只要對上述操作稍作修改即可:在遍歷完一層節(jié)點之后,將存儲該層節(jié)點值的列表添加到結(jié)果列表的頭部。

          為了降低在結(jié)果列表的頭部添加一層節(jié)點值的列表的時間復(fù)雜度,結(jié)果列表可以使用鏈表的結(jié)構(gòu),在鏈表頭部添加一層節(jié)點值的列表的時間復(fù)雜度是 O(1)。在 Java 中,由于我們需要返回的 List 是一個接口,這里可以使用鏈表實現(xiàn);而 C++ 或 Python 中,我們需要返回一個 vector 或 list,它不方便在頭部插入元素(會增加時間開銷),所以我們可以先用尾部插入的方法得到從上到下的層次遍歷列表,然后再進行反轉(zhuǎn)。


          class?Solution?{
          ????public?List<List> levelOrderBottom(TreeNode root) {
          ????????List<List> levelOrder = new?LinkedList<List>();
          ????????if?(root == null) {
          ????????????return?levelOrder;
          ????????}
          ????????Queue queue = new?LinkedList();
          ????????queue.offer(root);
          ????????while?(!queue.isEmpty()) {
          ????????????List level = new?ArrayList();
          ????????????int size = queue.size();
          ????????????for?(int i = 0; i < size; i++) {
          ????????????????TreeNode node = queue.poll();
          ????????????????level.add(node.val);
          ????????????????TreeNode left = node.left, right = node.right;
          ????????????????if?(left != null) {
          ????????????????????queue.offer(left);
          ????????????????}
          ????????????????if?(right != null) {
          ????????????????????queue.offer(right);
          ????????????????}
          ????????????}
          ????????????levelOrder.add(0, level);
          ????????}
          ????????return?levelOrder;
          ????}
          }


          好了,今天的文章就到這里,如果覺得有所收獲,請順手點個在看或者轉(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)造二叉樹

          瀏覽 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>
                  久久精品综合 | 不卡无码免费视频 | 中文字幕22页 | 亚洲黄色片免费看 | 靠逼在线观看 |