国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

二叉搜索樹與雙向鏈表

開發 前端
在二叉樹中,每個節點都有兩個指向子節點的指針。在雙向鏈表中,每個節點也有兩個指針,分別指向前一個節點和后一個節點。這兩種節點的結構很相似,二叉搜索樹是一種排序的數據結構,它的左子節點的值總是小于父節點的值,右子節點的值總是大于父節點的值。

前言

有一顆二叉搜索樹,在不創建任何新節點的條件下,如何將它轉換成一個排序的雙向鏈表?本文就跟大家分享下這個算法,歡迎各位感興趣的開發者閱讀本文。

思路分析

在二叉樹中,每個節點都有兩個指向子節點的指針。在雙向鏈表中,每個節點也有兩個指針,分別指向前一個節點和后一個節點。這兩種節點的結構很相似,二叉搜索樹是一種排序的數據結構,它的左子節點的值總是小于父節點的值,右子節點的值總是大于父節點的值。

那么,我們在將二叉搜索樹轉換為排序雙向鏈表時:

  • 原先指向左子節點的指針,調整為鏈表中指向前一個節點的指針。
  • 原先指向右子節點的指針,調整為鏈表中指向后一個節點的指針。

如何轉換

接下來,我們考慮下如何進行轉換。由于轉換后的鏈表是排好序的,我們可以中序遍歷樹中的每個節點,因為我們在文章實現二叉搜索樹-中序遍歷中,總結出了它的特點是按照從小到大的順序訪問每個節點。

我們用一個具體的例子來做進一步的分析,當我們執行中序遍歷到根節點的時候,就可以把樹看成3部分(如下圖所示):

  • 值為10的節點
  • 根節點值為6的左子樹
  • 根節點值為14的右子樹

圖片

根據排序鏈表的定義,值為10的節點將和它的左子樹中的最大節點(值為8的節點)鏈接起來,同時它還將和右子樹中最小的節點(值為12的節點)鏈接起來,如下圖所示,將其拆成了根節點、左、右子樹,我們把左子樹與右子樹都轉換成雙向鏈表之后再和根節點鏈接起來,整顆二叉搜索樹也就轉成了排序雙向鏈表。

圖片

總結思路

按照中序遍歷的順序,當我們遍歷轉換到根節點(值為10的節點)時,它的左子樹已經轉換成一個排序的鏈表了,并且處在鏈表中的最后一個節點時當前值最大的節點。我們把值為8的節點和根節點鏈接起來,此時鏈表中的最后一個節點就是10了。接著我們去遍歷轉換右子樹,并把根節點和右子樹中最小的節點鏈接起來。

分析到這里,相信大家已經看出了左、右子樹節點轉換的過程跟遍歷的過程是一樣的,因此我們可以用遞歸來解決問題。

  • 將左子樹構造成雙鏈表,并返回頭節點
  • 定位至左子樹雙鏈表最后一個節點
  • 如果左子樹鏈表不為空的話,將當前根節點追加到左子樹鏈表
  • 將右子樹構造成雙鏈表,并返回頭節點
  • 如果右子樹鏈表不為空的話,將該鏈表追加到root節點之后
  • 根據左子樹鏈表是否為空確定返回的節點

實現代碼

思路捋清之后,接下來我們看下代碼的實現。

export function treeToLinkedList(
root: BinaryTreeNode | null | undefined
): BinaryTreeNode | null {
if (root == null) return null;
if (root.left == null && root.right == null) return root;
// 將左子樹構造成雙鏈表,返回鏈表的頭節點
const leftTree = treeToLinkedList(root.left);
// 遍歷左子樹雙鏈表,找到它右子樹的最后一個節點
let pNode = leftTree;
while (pNode != null && pNode.right != null) {
pNode = pNode.right;
}
// 最后一個節點存在,則將兩個節點相互連接起來
if (pNode) {
// 將其右子樹與根節點連接
pNode.right = root;
// 將根節點的左子樹與其連接
root.left = pNode;
}
// 將右子樹構造成雙鏈表,返回鏈表的頭節點
const rightTree = treeToLinkedList(root.right);
// 右子樹鏈表不為空,則將該鏈表追加到root節點之后
if (rightTree != null) {
rightTree.left = root;
root.right = rightTree;
}
return leftTree != null ? leftTree : root;
}
測試用例

我們用文章中所列舉的例子來校驗下上述代碼能否正確解決問題。

const tree: BinaryTreeNode = {
key: 10,
left: {
key: 6,
left: {
key: 4
},
right: {
key: 8
}
},
right: {
key: 14,
left: {
key: 12
},
right: {
key: 16
}
}
};

const linkedListResult = treeToLinkedList(tree);
console.log(linkedListResult);

執行結果如下所示,正確的將樹左右指針所指向的節點進行了更改。

圖片

image-20221222165006886

圖片

示例代碼

本文用到的代碼完整版請移步:

  • BinaryTreeToDoublyLinkedList.ts
  • binaryTreeToDoublyLinkedList-test.ts
責任編輯:武曉燕 來源: 神奇的程序員
相關推薦

2021-12-07 06:55:17

二叉搜索樹鏈表

2020-09-23 18:25:40

算法二叉樹多叉樹

2021-08-31 11:35:24

二叉搜索樹迭代法公共祖先

2021-09-02 11:31:28

二叉搜索樹迭代法公共祖先

2022-01-11 10:01:25

二叉搜索樹數量

2023-07-31 08:01:13

二叉搜索測試

2021-09-03 08:58:00

二叉搜索樹節點

2020-04-27 07:05:58

二叉樹左子樹右子樹

2023-02-13 08:02:08

哈希函數哈希表搜索樹

2024-01-17 07:36:50

二叉搜索聯系簿

2021-09-07 11:01:41

二叉搜索樹序數組

2021-08-26 11:31:11

二叉樹數據結構算法

2021-04-06 08:20:24

二叉搜索樹數據結構算法

2021-10-11 06:38:52

遞歸二叉搜索樹

2021-09-06 10:38:50

二叉搜索樹遞歸

2020-10-11 16:56:48

二叉搜索樹代碼開發

2023-08-29 08:31:13

B+樹數據索引

2021-04-20 08:37:14

數據結構二叉樹

2021-04-19 07:47:42

數據結構二叉樹Tree

2013-07-15 16:35:55

二叉樹迭代器
點贊
收藏

51CTO技術棧公眾號

91超碰在线免费| 色妹子一区二区| 久久综合久久久久88| 欧美有码在线视频| 日本在线观看网站| 国产精品免费视频网站| 先锋影音男人资源| 日韩午夜av在线| 国内精品视频在线| 免费观看成人性生生活片| 欧美三区在线观看| 91网页版在线登录入口| 91在线免费播放| 亚洲激情啪啪| 亚洲综合激情在线| 国产成人精品视频在线| 天堂综合在线播放| 日韩精品亚洲精品| 色呦呦视频在线观看| 色天天综合色天天久久| 国产网站av| 国产精品美女久久久久久| 久久99久久久久久| 青青草原综合久久大伊人精品优势| 国产精品视频yy9099| 91精品国产高清久久久久久| 日韩精品福利视频| 亚洲免费大片| 成人免费视频网站| 97精品国产| 国产精品一区二区三区毛片淫片 | 开心九九激情九九欧美日韩精美视频电影 | 欧美理论电影在线观看| 91青娱乐在线视频| 国产99精品视频| 宅男av一区二区三区| 亚洲毛片一区| 亚洲资源在线看| 91超碰成人| 999视频在线免费观看| 亚洲精品一二三区区别| 亚洲va久久久噜噜噜| 欧美成人精品一区二区三区在线看| 欧美在线一区二区视频| 同性恋视频一区| 日韩av快播网址| 国产成人精品免费视| 日本久久久久久久久久久| 亚洲人挤奶视频| 国产美女91呻吟求| 韩日欧美一区| 黄色小网站91| 韩国成人精品a∨在线观看| 青春草在线视频免费观看| 精品亚洲成a人| 国产aaa一级片| 亚洲色图丝袜美腿| 欧美成人综合在线| 精品久久一区二区三区| 成人做爰视频www网站小优视频| 日韩在线一区二区三区免费视频| 日韩一区二区三区精品视频第3页| 2019中文在线观看| 欧美激情综合色综合啪啪| 午夜老司机精品| 26uuu久久综合| 导航福利在线| 欧美乱妇15p| 亚洲一区资源| 91av在线免费观看视频| 欧美国产精品| 成人手机视频在线| 亚洲欧美一区二区视频| 中文字幕在线免费| 亚洲免费视频网站| 欧美交a欧美精品喷水| 国产精品一区二区三区在线 | 男人天堂2020| 欧美丰满少妇xxxbbb| 欧洲一级精品| 97在线视频国产| 亚洲日本欧美| 免费观看精品视频| 91福利视频在线| 电影久久久久久| 国产综合福利在线| 国产99精品在线观看| 伊大人久久香线焦宗合一75大| 亚洲国产中文字幕久久网| 免费一区二区| 特级西西444| 在线观看免费一区| 天堂精品在线视频| 日本在线一区| 亚洲国产精品一区二区久久恐怖片| 国产蜜臀在线| 国产精品第三页| 精品写真视频在线观看| 宅男深夜免费观看视频| 亚洲欧美在线x视频| 免费观看在线午夜影视| 欧美激情亚洲精品| 亚洲欧美日韩国产另类专区| 日韩三级影院| 日韩中文字幕在线播放| 久久99视频| 999国产视频| 国产精品888| 男人天堂2020| 国产99久久久国产精品免费看| 欧美日本高清视频在线观看| 国产亚洲自拍偷拍| 成人丝袜高跟foot| 青青青草网站免费视频在线观看| 色在人av网站天堂精品| 1024精品久久久久久久久| 国产精品直播网红| 本田岬高潮一区二区三区| 欧美91在线|欧美| 亚洲精品tv久久久久久久久| 久久精品久久综合| 男女无套免费网站| 亚洲欧美日韩中文播放| 亚洲一区二区三区四区视频| 亚洲资源av| 亚洲精品第一国产综合野草社区| 一本久久a久久精品亚洲| 国产精品美女久久久久人| 一女被多男玩喷潮视频| 国产亚洲精品高潮| 久久久久国产免费免费| 影音先锋亚洲电影| 白白色在线观看| 国产精品自拍视频在线| 欧美电影在线观看网站| 久久精品国产精品国产精品污| 综合中文字幕亚洲| 性欧美freesex顶级少妇| 精品麻豆av| 欧美日韩美女在线| 老司机成人在线| 成人一级片网站| 亚洲欧洲高清在线| 七七婷婷婷婷精品国产| a视频在线免费看| 国产手机精品在线| 欧美自拍丝袜亚洲| 欧美精品偷拍| 精品成人一区二区三区免费视频| 国产精品美女免费| 一区二区三区在线免费| 嗯用力啊快一点好舒服小柔久久| 人人妻人人添人人爽欧美一区| 一本一道久久a久久精品逆3p | 久久久久久久免费| 一本色道a无线码一区v| 外国成人免费视频| 手机福利小视频在线播放| 国产精品久久91| 亚洲尤物在线视频观看| 欧美日韩黑人| 天堂资源最新在线| 国产激情美女久久久久久吹潮| 色乱码一区二区三区88| 最新亚洲视频| 久草在线资源站资源站| 中文字幕日韩精品久久| 亚洲欧洲偷拍精品| 91啦中文在线观看| 高潮久久久久久久久久久久久久| 自拍偷拍精选| 成人中心免费视频| 欧美午夜寂寞影院| 另类小说欧美激情| 偷拍自拍亚洲| 精品日韩美女的视频高清| 色素色在线综合| 在线一区视频| 国产超碰在线一区| 亚洲视频图片小说| 成人444kkkk在线观看| 亚洲欧洲美洲在线综合| 久久久久久国产免费 | 香蕉视频成人在线观看| 91在线一区二区三区| 亚洲影院久久精品| 日韩电影视频免费| 欧美 日韩 国产在线| 成人在线观看免费| 日日夜夜精品一区| 日韩一区二区三区精品| xnxx国产精品| 欧美午夜理伦三级在线观看| 精品一区二区不卡| 8x8x8国产精品| 国内一区二区视频| 久久亚洲道色| 97超碰人人在线| 青青草视频在线免费播放| 国产精品入口免费视频一|