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

劍指offer7--二叉搜尋樹與雙向連結串列

問題描述:

輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。

解題思路:

二叉搜尋樹的中序遍歷,同時每一次增加一個指向

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    def Convert(self, pRootOfTree):
        # write code here
        if not pRootOfTree:
            return None
        if not pRootOfTree.left and not pRootOfTree.right:
            return pRootOfTree
        left = self.Convert(pRootOfTree.left)
        if left:
            while left.right:
                left = left.right
            left.right = pRootOfTree
            pRootOfTree.left = left
        right = self.Convert(pRootOfTree.right)
        if right:
            while right.left:
                right = right.left
            right.left = pRootOfTree
            pRootOfTree.right = right
        while pRootOfTree.left:
            pRootOfTree = pRootOfTree.left 
        return pRootOfTree

相關推薦

offer7--搜尋雙向連結串列

問題描述: 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。 解題思路: 二叉搜尋樹的中序遍歷,同時每一次增加一個指向 # -*- coding:utf-8 -*- # class TreeNode

offer -- 搜尋雙向連結串列

題目 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。 AC程式碼 /** public class TreeNode { int val = 0; TreeNode left = null;

Offer - 搜尋雙向連結串列(Java實現)

題目描述: 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。 思路分析: 二叉搜尋樹(BST)有一個很關鍵的結論就是:中序遍歷的結果是非遞減(遞增)序列。而本題要求將BST轉換成排序的雙向連結串列,核

offer 搜尋雙向連結串列 python

題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。 樣例 返回雙向連結串列的頭節點 想法一: 首先要知道二叉搜尋樹的中序遍歷序列就是排序的數列,之後只需要把當前節點的右子樹設為下一個節點

offer36--搜尋雙向連結串列

題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。 思路: 不能建立新節點 肯定是中序遍歷,麻煩的在於需要保持一個遍歷過程中連結串列的尾巴,這樣才能遞迴成連結串列 /* struct TreeNod

offer:搜尋雙向連結串列(java)

題目:輸入一顆二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立新的結點,只能調整樹中結點指標的指向。 比如如下圖中的二叉搜尋樹,則輸出轉換之後的排序雙向連結串列為:     由於要求轉換之後的連結串列是排好序的,我們可以中序遍歷樹的每一個結點,

offer25.搜尋雙向連結串列

https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5?tpId=13&tqId=11179&tPage=2&rp=2&ru=%2Fta%2Fcoding-interviews&

offer——搜尋雙向連結串列

題目描述:輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。分析:這個題本質上其實是對二叉搜尋樹的中序遍歷,但是要對結點的指標稍作改動。1.先遍歷左子樹,將其構造成雙鏈表,並返回連結串列的‘根’結點;2.得到

[offer] 搜尋雙向連結串列

題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。如圖:  解題思路 吐槽 我刷的牛客網就只有文字描述沒有圖啊!!表示看不懂… 網上搜索看到這張圖片之後開始構思解題思路。當時瞄到這麼一張

offer_26_搜尋雙向連結串列

題目描述輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。/*思路:將二叉搜尋樹convert為雙向連結串列,嘗試遞迴解決。遞迴關係:當訪問到節點root時,root->left與轉換後的左子樹連結串列

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

關於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