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

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

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

      【JavaScript】前端算法題(重建二叉樹、反向輸出鏈表每個節點)

      前言

      今天復習了一些前端算法題,寫到一兩道比較有意思的題:重建二叉樹、反向輸出鏈表每個節點

      題目

      重建二叉樹: 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重復的數字。例如輸入前序遍歷序列 {1,2,4,7,3,5,6,8} 和中序遍歷序列 {4,7,2,1,5,3,8,6},則重建二叉樹并返回。

      思路

      前序遍歷(根左右)和中序遍歷(左根右)

      思路就是使用遞歸把他分化為每個小的二叉樹,然后都根據前序遍歷(根左右)和中序遍歷(左根右)的特性,前序的首元素就是根,然后再找到中序的根,根的左邊就是左右邊就是右,再進行遞歸,直到前序為null的時候就代表沒有根節點了,那這個元素就是尾節點

      一.

      ①[1,2,4,7,3,5,6,8],[4,7,2,1,5,3,8,6]-> val=>1 ->L([2,4,7],[4,7,2]) & R([3,5,6,8],[5,3,8,6]) 根節點 1 ,有左右節點

      二.

      ①L([2,4,7],[4,7,2])-> val=>2 ->L([4,7],[4,7]) && R(null , null) 根節點2(屬1的左節點) ,有左節點,無右節點

      ②R([3,5,6,8],[5,3,8,6])-> val=>3 ->L([5],[5]) && R([6,8],[6,8]) 根節點3(屬1的右節點) ,有左右節點

      三.

      ①L([4,7],[4,7]) ->val=>4 -> L(null , null) && R([7],[7]) 根節點4(屬2的左節點) ,有右節點,無左節點

      ②R([6,8],[8,6]) -> val=>6 -> L([8] , [8]) && R(null , null) 根節點6(屬3的右節點),有左節點,無右節點

      ③L([5],[5]) -> val=>5->(null,null)->終止 尾節點5(屬3的左節點)

      四.

      ①R([7],[7]) -> val=>7 ->終止 尾節點7(屬4的右節點)

      ②L([8],[8]) -> val=>8 ->終止 尾節點8(屬6的左節點)

      代碼實現

      function rebuildBinaryTree(front, centre) {
          //判斷是否為空節點
          if (!front || front.length == 0) {
              return null;
          }
          // 根節點
          var TreeNode = {
              val: front[0]
          };
          for (var i = 0; i < front.length; i++) {
              //找到中序遍歷根節點位置
              if (centre[i] === front[0]) {
                  //中序遍歷(左根右)
                  //根節點左邊的節點為該節點的左邊
                  TreeNode.left = rebuildBinaryTree(front.slice(1, i + 1), centre.slice(0, i));
                  //根節點右邊的節點為該節點的右邊
                  TreeNode.right = rebuildBinaryTree(front.slice(i + 1), centre.slice(i + 1));
              }
          }
          return TreeNode;
      }
      let tree = rebuildBinaryTree([1, 2, 4, 7, 3, 5, 6, 8], [4, 7, 2, 1, 5, 3, 8, 6])
      console.log(tree)
      

      題目

      從尾到頭打印鏈表: 輸入一個鏈表,從尾到頭打印鏈表每個節點的值。

      思路

      由于鏈表是單向的,我們不能直接從頭節點開始反向遍歷。

      所以可以使用數組來模擬棧。迭代遍歷鏈表,將鏈表每個節點壓入棧中,然后再依次從棧中彈出并打印。

      代碼實現

      // 定義一個節點類,結構data表示節點數據、next表示下個節點的指針
      class Node {
          constructor(data) {
              this.data = data
              this.next = null
          }
      }
      
      function printNode(node) {
          // 定義一個數組表示模擬棧
          let stack = new Array()
          // 初始化當前節點為傳入的節點
          let NodeNextElm = node
          //判斷下個節點指針是否為空
          while (NodeNextElm !== null) {
              //壓棧
              stack.push(NodeNextElm.data)
              //存儲下個節點的指針
              NodeNextElm = NodeNextElm.next
          }
          while (stock.length > 0) {
              //當棧不為空時,循環彈出棧頂元素并打印
              console.log(stack.pop())
          }
      }
      //初始化鏈表
      //新建鏈表節點
      const node1 = new Node(1)
      const node2 = new Node(2)
      const node3 = new Node(3)
      //手動存儲下個節點的指針
      node1.next = node2
      node2.next = node3
      //調用
      printNode(node1)
      
      

      過程解析

      一. 進入,此時的NodeNextElm:{
          "data": 1,
          "next": {
              "data": 2,
              "next": {
                  "data": 3,
                  "next": null
              }
          }
      }
      
      此時進入while循環:
      
      ①第一次循環:
      
      棧stack:[1]
      
      NodeNextElm:{
      	"data": 2,
      	"next": {
      		"data": 3,
      		"next": null
      	}
      }
      
      ②第二次循環:
      
      棧stack:[1,2]
      
      NodeNextElm:{
      	"data": 3,
      	"next": null
      }
      
      ③第三次循環:
      
      棧stack:[1,2,3]
      
      NodeNextElm:null
      
      循環結束
      
      pop()彈出棧并打印:3,2,1
      

      上述為個人整理內容,水平有限,如有錯誤之處,望各位園友不吝賜教!如果覺得不錯,請點個贊和關注支持一下!謝謝~??????? [鮮花][鮮花][鮮花]

      posted @ 2024-07-30 00:39  我恨bug  閱讀(211)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 色综合天天色综合久久网| 东方av四虎在线观看| 精品尤物国产尤物在线看| 东京热一区二区三区在线| 永久免费在线观看蜜桃视频| 一本精品99久久精品77| 亚洲成av人片无码迅雷下载| 日本一区二区三区专线| 无码精品人妻一区二区三区湄公河| 99精品日本二区留学生| 久久夜色噜噜噜亚洲av| 国产丰满乱子伦无码专区 | 成人免费A级毛片无码片2022| 777米奇影视第四色| 国产乱码日产乱码精品精| 国产精品成人亚洲一区二区| 91人妻无码成人精品一区91| 2019久久久高清日本道| 国产av仑乱内谢| 无码伊人久久大杳蕉中文无码| 城市| 大色综合色综合网站| 另类 专区 欧美 制服| 麻豆妓女爽爽一区二区三| 精品久久综合日本久久网| 国产91午夜福利精品| 国产精品99精品久久免费| 国产片一区二区三区视频| 久久综合97丁香色香蕉| 日本一卡2卡3卡4卡无卡免费| 中文字幕有码无码AV| 国产老肥熟一区二区三区| 中文字幕午夜福利片午夜福利片97 | 成人午夜国产内射主播| 亚洲成人一区二区av| a级国产乱理伦片在线观看al | 亚洲欧美人成电影在线观看| 日本高清一区免费中文视频| 国产线播放免费人成视频播放| 亚洲国产av无码综合原创国产 | 三上悠亚在线精品二区|