1. 程式人生 > >劍指offer——二叉搜尋樹與雙向連結串列

劍指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