日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

算法 --- [队列结构]二叉树的层次遍历

發(fā)布時間:2023/12/10 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法 --- [队列结构]二叉树的层次遍历 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

思路

使用隊列:

  • 初始化的時候,將root, push進隊列q中
  • 循環(huán)隊列q,當其中不為空時,取出第一個元素(q.shift),記為r
  • 若r.left不為空,將r.left推進q,若r.right不為空,將r.right推進q
  • 記錄層次:
    4. 初始化設(shè)置i =0;
    5. 在入隊的時候,入隊一個對象{r: root, i}
    6. 出隊時,使用es6的解構(gòu)賦值取出 {r , i}

    • 實現(xiàn)如下:
    var averageOfLevels = function (root) {let q = []; // 隊列let i = 0; // 記錄層次用的標記q.push({r: root, i}); // 將根放入隊列中while(q.length > 0) { // 隊列不為空let { r, i } = q.shift(); // 得到根和層次信息if(r) { // 根不為空i++; // 層次加1if(r.left) { // 左孩子不為空q.push(r.left);}if(r.right) {.push(r.right); }console.log(r.val, i);}} }

    • 上面基本上已經(jīng)實現(xiàn)了層次遍歷
    • 下面新增一個返回數(shù)組,實現(xiàn)題目需求
  • 現(xiàn)在擁有的是層號和每層的值.
  • 接下來將每層的層號和值作為鍵值對放入map結(jié)構(gòu)中.
  • var averageOfLevels = function (root) {let q = [];let i = 0;let map = new Map;q.push({ r: root, i });while (q.length > 0) {let { r, i } = q.shift();if (r) {i++;if (r.left) {q.push({ r: r.left, i });}if (r.right) {q.push({ r: r.right, i });}// 改動部分, 使用map結(jié)構(gòu)存儲層次的 鍵值對if(map.has(i)){let arr = map.get(i);arr.push(r.val);map.set(i, arr);} else{map.set(i,[r.val]);}}}for(let [i, key] of map){console.log(i, key);} };

    • 上面完成了將每層的層號和值作為鍵值對放入map結(jié)構(gòu)中.
    • 下面修改末尾的for(let [i, key] of map)內(nèi)部,使其滿足題目的需求
    let retArr = []; for (let [i, key] of map) {let sum = 0;if (key.length > 1) {for (let i = 0; i < key.length; i++) {sum += key[i];}} else {sum = key[0];}retArr[i - 1] = sum / key.length; } return retArr

    總結(jié)

    以上是生活随笔為你收集整理的算法 --- [队列结构]二叉树的层次遍历的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。