最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

前端算法題解leetcode114二叉樹展開為鏈表

 更新時間:2022年09月22日 11:29:05   作者:前端_奔跑的蝸牛  
這篇文章主要為大家介紹了前端算法題解leetcode114二叉樹展開為鏈表,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

正文

題目地址

給你二叉樹的根結點 root ,請你將它展開為一個單鏈表:

  • 展開后的單鏈表應該同樣使用 TreeNode ,其中 right 子指針指向鏈表中下一個結點,而左子指針始終為 null 。
  • 展開后的單鏈表應該與二叉樹 先序遍歷 順序相同。

示例 1:

輸入: root = [1,2,5,3,4,null,6]
輸出: [1,null,2,null,3,null,4,null,5,null,6]

示例 2:

輸入: root = []
輸出: []

示例 3:

輸入: root = [0]
輸出: [0

提示:

  • 樹中結點數(shù)在范圍 [0, 2000] 內
  • -100 <= Node.val <= 100

進階: 你可以使用原地算法(O(1) 額外空間)展開這棵樹嗎?

解題思路-基礎

本題要求我們把二叉樹拆成單鏈表,但是其實仍然是二叉樹,只不過每個子樹只有右子樹。
最簡單的辦法就是前序遍歷二叉樹,將節(jié)點放入數(shù)組,然后遍歷前序遍歷獲取到的節(jié)點數(shù)組,構造結果二叉樹。

代碼實現(xiàn)

function treeToList(root){
    const list = []
    function preorder(node){
        if(node === null){
            return
        }
        list.push(node)
        preorder(node.left)
        preorder(node.right)
    }
    preorder(root)
    return list
}
var flatten = function(root) {
    if(root === null){
        return null
    }
    const list = treeToList(root)
    for(let i = 1;i&lt;list.length;i++){
        list[i-1].left = null
        list[i-1].right = list[i]
    }
}

解題思路-進階

上面的解題思路可以完成解題,但是沒有達到本題進階的要求:使用原地算法(O(1) 額外空間)展開這棵樹。

想要達到進階的要求,就只能使用常量的額外空間,這里其實我們可以借用一個 current 變量指向當前正在處理的節(jié)點,同樣是前序遍歷,每次把當前節(jié)點掛到 current 的右子樹上,同時把 current 的左子樹置為 null,防止出現(xiàn)循環(huán)引用,然后繼續(xù)處理后續(xù)節(jié)點,這樣當前序遍歷完成,就把二叉樹處理成了單鏈表狀態(tài)。

代碼實現(xiàn)

var flatten = function(root) {
    if(root === null){
        return null
    }
    let current = {}
    function preorder(node){
        if(node === null){
            return
        }
        current.left = null
        current.right = node
        current = current.right
        const left = current.left
        const right = node.right
        preorder(left)
        preorder(right)
    }
    preorder(root)
}

至此我們就完成了 leetcode-114-二叉樹展開為鏈表,更多關于前端算法二叉樹展開為鏈表的資料請關注腳本之家其它相關文章!

相關文章

  • div+css實現(xiàn)鼠標放上去,背景跟圖片都會變化。

    div+css實現(xiàn)鼠標放上去,背景跟圖片都會變化。

    div+css實現(xiàn)鼠標放上去,背景跟圖片都會變化。...
    2007-06-06
  • Web開發(fā)必知Javascript技巧大全

    Web開發(fā)必知Javascript技巧大全

     JavaScript是一個絕冠全球的編程語言,可用于Web開發(fā)、移動應用開發(fā)(PhoneGap、Appcelerator)、服務器端開發(fā)(Node.js和Wakanda)等等,通過本文給大家介紹Web開發(fā)必知Javascript技巧大全,需要的朋友參考下吧
    2016-02-02
  • p5.js 畢達哥拉斯樹的實現(xiàn)代碼

    p5.js 畢達哥拉斯樹的實現(xiàn)代碼

    這篇文章主要介紹了p5.js 畢達哥拉斯樹的實現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • JS+CSS實現(xiàn)高亮關鍵詞(不侵入DOM)的方式

    JS+CSS實現(xiàn)高亮關鍵詞(不侵入DOM)的方式

    這篇文章主要為大家詳細介紹了JS+CSS實現(xiàn)高亮關鍵詞(不侵入DOM)的方式,文中的示例代碼講解詳細,具有一定的參考價值,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-12-12
  • JS中bridge的原理與封裝

    JS中bridge的原理與封裝

    這篇文章主要介紹了JS中bridge的原理與封裝,文章圍繞主題的相關資料展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-06-06
  • DVA框架統(tǒng)一處理所有頁面的loading狀態(tài)

    DVA框架統(tǒng)一處理所有頁面的loading狀態(tài)

    dva 有一個管理 effects 執(zhí)行的 hook,并基于此封裝了 dva-loading 插件。下面通過本文給大家分享DVA框架統(tǒng)一處理所有頁面的loading狀態(tài),感興趣的朋友一起看看吧
    2017-08-08
  • JavaScript的console命令使用實例

    JavaScript的console命令使用實例

    這篇文章主要介紹了javascript的console命令使用實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • 如何用JavaScript讓你的瀏覽器說話

    如何用JavaScript讓你的瀏覽器說話

    這篇文章主要介紹了如何用JavaScript讓你的瀏覽器說話,對語音感興趣的同學,可以實驗一下
    2021-04-04
  • JS求平均值的小例子

    JS求平均值的小例子

    這篇文章主要介紹了JS求平均值的小例子,有需要的朋友可以參考一下
    2013-11-11
  • js判斷是否為ie的方法小結

    js判斷是否為ie的方法小結

    這篇文章主要介紹了js判斷是否為ie的方法,有需要的朋友可以參考一下
    2014-01-01

最新評論

凯里市| 隆化县| 蒙山县| 宁安市| 体育| 高安市| 察雅县| 潢川县| 马山县| 宣恩县| 茌平县| 化德县| 西峡县| 曲沃县| 集贤县| 舒城县| 许昌市| 威远县| 德保县| 崇文区| 新宁县| 永宁县| 临海市| 布尔津县| 香港 | 伊通| 公安县| 广东省| 左贡县| 封丘县| 衡东县| 迁安市| 赣州市| 贵南县| 乐安县| 定兴县| 蒲城县| 苏州市| 荔浦县| 吉林省| 宁海县|