劍指offer——二叉搜尋樹與雙向連結串列
題目描述:輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。
分析:這個題本質上其實是對二叉搜尋樹的中序遍歷,但是要對結點的指標稍作改動。
1.先遍歷左子樹,將其構造成雙鏈表,並返回連結串列的‘根’結點;
2.得到左子樹雙鏈表的最後一個結點;
3.如果左子樹不為空,將當前根結點追加到左子樹連結串列後;
4.遍歷右子樹,將其構造成雙鏈表,並返回連結串列的‘根’結點;
5.如果右子樹不為空,將右子樹連結串列追加到當前根結點之後;
6.返回結點。
參考程式碼:
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Solution { public: TreeNode* ConvertNode( TreeNode* root) { if( root == nullptr) return nullptr; if( root->left != nullptr) { TreeNode* left = ConvertNode(root->left); while( left->right != nullptr) left = left->right; root->left = left; left->right = root; } if( root->right != nullptr) { TreeNode* right = ConvertNode(root->right); while( right->left != nullptr) right = right->left; right->left = root; root->right = right; } return root; } TreeNode* Convert(TreeNode* pRootOfTree) { if( pRootOfTree == nullptr) return nullptr; TreeNode* pRoot = ConvertNode(pRootOfTree); while( pRoot->left != nullptr) pRoot = pRoot->left; return pRoot; } };
相關推薦
劍指offer -- 二叉搜尋樹與雙向連結串列
題目 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。 AC程式碼 /** public class TreeNode { int val = 0; TreeNode left = null;
劍指Offer - 二叉搜尋樹與雙向連結串列(Java實現)
題目描述: 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。 思路分析: 二叉搜尋樹(BST)有一個很關鍵的結論就是:中序遍歷的結果是非遞減(遞增)序列。而本題要求將BST轉換成排序的雙向連結串列,核
劍指offer 二叉搜尋樹與雙向連結串列 python
題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。 樣例 返回雙向連結串列的頭節點 想法一: 首先要知道二叉搜尋樹的中序遍歷序列就是排序的數列,之後只需要把當前節點的右子樹設為下一個節點
劍指offer:二叉搜尋樹與雙向連結串列(java)
題目:輸入一顆二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立新的結點,只能調整樹中結點指標的指向。 比如如下圖中的二叉搜尋樹,則輸出轉換之後的排序雙向連結串列為: 由於要求轉換之後的連結串列是排好序的,我們可以中序遍歷樹的每一個結點,
劍指offer——二叉搜尋樹與雙向連結串列
題目描述:輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。分析:這個題本質上其實是對二叉搜尋樹的中序遍歷,但是要對結點的指標稍作改動。1.先遍歷左子樹,將其構造成雙鏈表,並返回連結串列的‘根’結點;2.得到
[劍指offer] 二叉搜尋樹與雙向連結串列
題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。如圖: 解題思路 吐槽 我刷的牛客網就只有文字描述沒有圖啊!!表示看不懂… 網上搜索看到這張圖片之後開始構思解題思路。當時瞄到這麼一張
劍指offer- 二叉搜尋樹與雙向連結串列
題目描述輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。解題思路private TreeNode pre = null; private TreeNode head = null; public Tree
劍指offer——二叉搜尋樹和雙向連結串列
劍指offer題越往後感覺越不好做呀,本來是不會做,現在是難看懂了,乍一眼看這個題,二叉搜尋樹 ,先把樹給拆了,然後排個序,最後加個鏈。不過實現還是不太容易的。 class Solution: def Convert(self,pRootOfTree): if n
劍指offer——二叉查詢樹與雙向連結串列(36題)
題目:輸入一棵二叉查詢樹,將該二叉查詢樹換成一個排序的雙向連結串列,要求不能建立任何新的節點,只能調整樹中節點指標的指向。 解題思想:又一是道二叉樹遍歷演算法的變型題,一定要往這個方向上面思考。此處採用中序遍歷(主體)演算法進行解題。 #include<iostre
劍指offer36--二叉搜尋樹與雙向連結串列
題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。 思路: 不能建立新節點 肯定是中序遍歷,麻煩的在於需要保持一個遍歷過程中連結串列的尾巴,這樣才能遞迴成連結串列 /* struct TreeNod
劍指offer25.二叉搜尋樹與雙向連結串列
https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5?tpId=13&tqId=11179&tPage=2&rp=2&ru=%2Fta%2Fcoding-interviews&
劍指offer7--二叉搜尋樹與雙向連結串列
問題描述: 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。 解題思路: 二叉搜尋樹的中序遍歷,同時每一次增加一個指向 # -*- coding:utf-8 -*- # class TreeNode
劍指offer_26_二叉搜尋樹與雙向連結串列
題目描述輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。/*思路:將二叉搜尋樹convert為雙向連結串列,嘗試遞迴解決。遞迴關係:當訪問到節點root時,root->left與轉換後的左子樹連結串列
關於劍指offer上“二叉搜尋樹與雙向連結串列”題的理解
題目描述: 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。 一、遞迴的思路 對於函式TreeNode* Convert(TreeNode* root),傳入的是需要轉換的二叉樹的頭結點,返回的是已經轉換好的
劍指offer系列(十一)二叉搜尋樹與雙向連結串列, 字串的排序
二叉搜尋樹與雙向連結串列 題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。 解題思路: 由於輸入的一個二叉搜尋樹,其左子樹小於右子樹的值,這位後面的排序做了準備,因為只需要中序遍歷即可,將所有 的節點儲存
劍指Offer 26. 二叉搜尋樹與雙向連結串列 (二叉搜尋樹)
題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。 題目地址 https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5?tpId=13&tqId=1
[劍指offer] --26.二叉搜尋樹與雙向連結串列
題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。 /** public class TreeNode { int val = 0; TreeNode left = null; Tr
《劍指offer》系列 二叉搜尋樹與雙向連結串列(Java)
連結 牛客: 二叉搜尋樹與雙向連結串列 題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。 思路 這個程式碼是借鑑網上的,整體結構和中序遍歷非常類似,只不過將原本輸出那部分的操作換成了改變結
[劍指offer] 26. 二叉搜尋樹與雙向連結串列
題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。 思路: 利用中序遍歷的特性,從小到大遍歷二叉樹每一個結點。 修改中序遍歷,在在其中加入一個前驅結點 遍歷左子
(劍指offer)二叉搜尋樹與雙向連結串列
時間限制:1秒 空間限制:32768K 熱度指數:183079 題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。 /** public class TreeNode { int val = 0