<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      LCR 155. 將二叉搜索樹轉化為排序的雙向鏈表

      LCR 155. 將二叉搜索樹轉化為排序的雙向鏈表

      LCR 155. 將二叉搜索樹轉化為排序的雙向鏈表

      參考題解

      前言

      什么是循環雙鏈表?

      雙向鏈表又稱雙鏈表,是鏈表的一種數據結構類型,其每個數據結點包含兩個指針,分別指向直接前驅和直接后繼,支持從前驅或后繼任意結點進行雙向遍歷。通常采用雙向循環鏈表結構實現,該結構通過頭尾結點互連形成閉環。

      什么是二叉搜索樹?

      關鍵性質:左 < 根 < 右

      二叉搜索樹(BST)又稱二叉查找樹或二叉排序樹。

      在二叉搜索樹中:

      1. 若任意結點的左子樹不空,則左子樹上所有結點的值均不大于它的根結點的值。

      2. 若任意結點的右子樹不空,則右子樹上所有結點的值均不小于它的根結點的值。

      3. 任意結點的左、右子樹也分別為二叉搜索樹

      中序遍歷

      核心思想:左根右

      解法思想

      首先,從題目可以知道,最終要是要將二叉搜索樹轉換為一個已排序的雙向循環鏈表,而在二叉樹的遍歷中,中序遍歷恰好可以將一個二叉搜索樹轉換為一個有序地數組

      因此,本題可以采用中序遍歷的思想

      函數解析

      dfs函數 – 深度優先遍歷

      如果當前遍歷的節點為null,那就說明當前訪問的是葉子節點,直接返回。(因為深度優先遍歷函數下去完之后肯定是要從二叉樹的最下邊開始回來的)

      遞歸當前的節點的左節點:dfs(cur.left)

      構建雙鏈表:

      • 判斷pre節點是否為null,如果是,那就說明當前節點cur是頭結點
      • 如果不為null,那就 pre.right = cur,構建pre的后繼指針
      • 接著構建cur的前驅指針,cur.left = pre
      • 構建好當前節點之后,接著構建下一個節點,pre就要替代cur的位置
      • 遞歸當前節點的右結點:dfs(cur.right)
      public void dfs(Node cur) {
          if(cur == null) {
              return;
          }
          dfs(cur.left);
          if(pre != null) {
              pre.right = cur;
          } else {
              head = cur;
          } 
          cur.left = pre;
          pre = cur;
          dfs(cur.right);
      }
      

      treeToDoublyList函數

      • 如果當前節點root為空,直接返回root或者null
      • 轉化為雙鏈表:dfs(root)
      • 構建循環雙鏈表:頭結點head要指向pre的后繼指針,pre指向head的前驅指針
      • 返回head

      關于pre

      在構建雙鏈表階段,當cur遍歷完最后一個節點的時候,就會繼續遍歷下一個節點,但下一個節點為null,而pre就會替代原本cur的位置,所以pre就會成為鏈表的尾結點。

      public Node treeToDoublyList(Node root) {
          if(root == null) return root;
          dfs(root); // 構建雙鏈表
          head.left = pre;
          pre.right = head;
          return head; 
      }
      

      完整代碼展示

      class Solution {
          Node pre, head;
          public Node treeToDoublyList(Node root) {
              if(root == null) return root;
              dfs(root); // 構建雙鏈表
              head.left = pre;
              pre.right = head;
              return head; 
          }
      
          public void dfs(Node cur) {
              if(cur == null) {
                  return;
              }
              dfs(cur.left);
              if(pre != null) {
                  pre.right = cur;
              } else {
                  head = cur;
              } 
              cur.left = pre;
              pre = cur;
              dfs(cur.right);
          }
      }
      

      end…

      posted @ 2025-10-20 23:40  Lantz12  閱讀(4)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲av本道一区二区| 青青青爽在线视频观看| 又湿又紧又大又爽a视频| 性欧美vr高清极品| 国产在线国偷精品产拍| 国产精品爽爽va在线观看网站 | 狠狠色丁香婷婷综合尤物| 国产嫩草精品网亚洲av| 无套内射视频囯产| 最新精品国偷自产在线美女足| 精品国内自产拍在线观看| 国产草草影院ccyycom| 国产一区二区视频在线看| 亚洲AV永久无码嘿嘿嘿嘿| 人成午夜免费视频无码| 亚洲香蕉免费有线视频| 国产l精品国产亚洲区| 亚洲性人人天天夜夜摸18禁止| 亚洲精品久久久久久婷婷| 久久精品国产www456c0m| 亚洲无人区码一二三区别| 女人色熟女乱| 猫咪AV成人永久网站在线观看| 亚洲综合在线一区二区三区| 天天做天天爱夜夜爽| 国产精品国产三级国av| 国产精品中文一区二区| 国产av激情无码久久| 91午夜福利在线观看精品| 久久精品国产亚洲av麻豆不卡| 视频一区二区三区四区久久| 奶头又大又白喷奶水av| 亚洲精品一区三区三区在| 一本大道无码av天堂| www插插插无码免费视频网站| 国产熟女av一区二区三区| AV最新高清无码专区| 动漫精品中文无码卡通动漫| 亚洲精品毛片一区二区 | 国产综合视频一区二区三区| 一区二区三区激情都市|