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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

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

發布時間:2025/7/25 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 426. 将二叉搜索树转化为排序的双向链表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

將一個二叉搜索樹就地轉化為一個已排序的雙向循環鏈表。可以將左右孩子指針作為雙向循環鏈表的前驅和后繼指針。

為了讓您更好地理解問題,以下面的二叉搜索樹為例:

我們希望將這個二叉搜索樹轉化為雙向循環鏈表。鏈表中的每個節點都有一個前驅和后繼指針。對于雙向循環鏈表,第一個節點的前驅是最后一個節點,最后一個節點的后繼是第一個節點。

下圖展示了上面的二叉搜索樹轉化成的鏈表?!癶ead” 表示指向鏈表中有最小元素的節點。

特別地,我們希望可以就地完成轉換操作。當轉化完成以后,樹中節點的左指針需要指向前驅,樹中節點的右指針需要指向后繼。還需要返回鏈表中的第一個節點的指針。

下圖顯示了轉化后的二叉搜索樹,實線表示后繼關系,虛線表示前驅關系。

算法:我們知道,返回的雙向鏈表是排好序的,所以我們需要利用BST的中序遍歷。我們先遞歸整個左子樹,再遞歸整個右子樹。需要注意的是,左子樹最右邊的結點的后繼結點就是根結點,而右子樹最左邊的結點的前驅結點是根節點。為了對應這種關系,我們利用pair進行結點的存儲。最后不要忘了做循環處理即可。

/* // 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;} };

?

轉載于:https://www.cnblogs.com/programyang/p/11161866.html

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。