日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

LeetCode 426. 将二叉搜索树转化为排序的双向链表

發(fā)布時(shí)間:2025/7/25 82 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 426. 将二叉搜索树转化为排序的双向链表 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

將一個(gè)二叉搜索樹(shù)就地轉(zhuǎn)化為一個(gè)已排序的雙向循環(huán)鏈表。可以將左右孩子指針作為雙向循環(huán)鏈表的前驅(qū)和后繼指針。

為了讓您更好地理解問(wèn)題,以下面的二叉搜索樹(shù)為例:

我們希望將這個(gè)二叉搜索樹(shù)轉(zhuǎn)化為雙向循環(huán)鏈表。鏈表中的每個(gè)節(jié)點(diǎn)都有一個(gè)前驅(qū)和后繼指針。對(duì)于雙向循環(huán)鏈表,第一個(gè)節(jié)點(diǎn)的前驅(qū)是最后一個(gè)節(jié)點(diǎn),最后一個(gè)節(jié)點(diǎn)的后繼是第一個(gè)節(jié)點(diǎn)。

下圖展示了上面的二叉搜索樹(shù)轉(zhuǎn)化成的鏈表。“head” 表示指向鏈表中有最小元素的節(jié)點(diǎn)。

特別地,我們希望可以就地完成轉(zhuǎn)換操作。當(dāng)轉(zhuǎn)化完成以后,樹(shù)中節(jié)點(diǎn)的左指針需要指向前驅(qū),樹(shù)中節(jié)點(diǎn)的右指針需要指向后繼。還需要返回鏈表中的第一個(gè)節(jié)點(diǎn)的指針。

下圖顯示了轉(zhuǎn)化后的二叉搜索樹(shù),實(shí)線表示后繼關(guān)系,虛線表示前驅(qū)關(guān)系。

算法:我們知道,返回的雙向鏈表是排好序的,所以我們需要利用BST的中序遍歷。我們先遞歸整個(gè)左子樹(shù),再遞歸整個(gè)右子樹(shù)。需要注意的是,左子樹(shù)最右邊的結(jié)點(diǎn)的后繼結(jié)點(diǎn)就是根結(jié)點(diǎn),而右子樹(shù)最左邊的結(jié)點(diǎn)的前驅(qū)結(jié)點(diǎn)是根節(jié)點(diǎn)。為了對(duì)應(yīng)這種關(guān)系,我們利用pair進(jìn)行結(jié)點(diǎn)的存儲(chǔ)。最后不要忘了做循環(huán)處理即可。

/* // Definition for a Node. class Node { public:int val;Node* left;Node* right;Node() {}Node(int _val, Node* _left, Node* _right) {val = _val;left = _left;right = _right;} }; */ class Solution { public:pair<Node*, Node*>dfs(Node* root){if(!root->left&&!root->right)return {root,root};if(root->left&&root->right){auto ls=dfs(root->left), rs=dfs(root->right);ls.second->right=root,root->left=ls.second;rs.first->left=root,root->right=rs.first;return {ls.first, rs.second};}if(root->left){auto ls=dfs(root->left);ls.second->right=root,root->left=ls.second;return {ls.first, root};}if(root->right){auto rs=dfs(root->right);rs.first->left=root,root->right=rs.first;return {root, rs.second};}return {root,root};}Node* treeToDoublyList(Node* root) {if(!root)return NULL;auto side=dfs(root);side.first->left=side.second;side.second->right=side.first;return side.first;} };

?

轉(zhuǎn)載于:https://www.cnblogs.com/programyang/p/11161866.html

總結(jié)

以上是生活随笔為你收集整理的LeetCode 426. 将二叉搜索树转化为排序的双向链表的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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