欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python二叉搜索樹與雙向鏈表轉(zhuǎn)換算法示例

 更新時(shí)間:2019年03月02日 12:07:24   作者:hustfc  
這篇文章主要介紹了Python二叉搜索樹與雙向鏈表轉(zhuǎn)換算法,涉及Python二叉樹構(gòu)建、遍歷及鏈表構(gòu)造等相關(guān)操作技巧,需要的朋友可以參考下

本文實(shí)例講述了Python二叉搜索樹與雙向鏈表轉(zhuǎn)換算法。分享給大家供大家參考,具體如下:

題目描述

輸入一棵二叉搜索樹,將該二叉搜索樹轉(zhuǎn)換成一個(gè)排序的雙向鏈表。要求不能創(chuàng)建任何新的結(jié)點(diǎn),只能調(diào)整樹中結(jié)點(diǎn)指針的指向。

普通的二叉樹也可以轉(zhuǎn)換成雙向鏈表,只不過不是排序的

思路:

1. 與中序遍歷相同

2. 采用遞歸,先鏈接左指針,再鏈接右指針

代碼1,更改doubleLinkedList,最后返回list的第一個(gè)元素:

class TreeNode:
  def __init__(self, x):
    self.val = x
    self.left = None
    self.right = None
class Solution:
  def lastElem(self, list):
    if len(list) == 0:
      return None
    else: return list[len(list) - 1]
  def ConvertCore(self, pRoot, doubleLinkedList):
    if pRoot:
      if pRoot.left:
        self.ConvertCore(pRoot.left, doubleLinkedList)
      pRoot.left = self.lastElem(doubleLinkedList)
      if self.lastElem(doubleLinkedList):
        self.lastElem(doubleLinkedList).right = pRoot
      doubleLinkedList.append(pRoot)
      if pRoot.right:
        self.ConvertCore(pRoot.right, doubleLinkedList)
  def Convert(self, pRootOfTree):
    if pRootOfTree == None:
      return None
    doubleLinkedList = []
    self.ConvertCore(pRootOfTree, doubleLinkedList)
    return doubleLinkedList[0]

代碼2,lastListNode指向雙向鏈表中的最后一個(gè)節(jié)點(diǎn),因此每次操作最后一個(gè)節(jié)點(diǎn)。這里要更改值,因此采用list的形式。

class TreeNode:
  def __init__(self, x):
    self.val = x
    self.left = None
    self.right = None
class Solution:
  def ConvertCore(self, pRoot, lastListNode):
    if pRoot:
      if pRoot.left:
        self.ConvertCore(pRoot.left, lastListNode)
      pRoot.left = lastListNode[0]
      if lastListNode[0]:
        lastListNode[0].right = pRoot
      lastListNode[0] = pRoot
      if pRoot.right:
        self.ConvertCore(pRoot.right, lastListNode)
  def Convert(self, pRootOfTree):
    # write code here
    if pRootOfTree == None:
      return None
    lastListNode = [None]
    self.ConvertCore(pRootOfTree, lastListNode)
    while lastListNode[0].left:
      lastListNode[0] = lastListNode[0].left
    return lastListNode[0]

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python加密解密算法與技巧總結(jié)》、《Python編碼操作技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進(jìn)階經(jīng)典教程

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • python 視頻下載神器(you-get)的具體使用

    python 視頻下載神器(you-get)的具體使用

    這篇文章主要介紹了python 視頻下載神器(you-get)的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • pycharm在調(diào)試python時(shí)執(zhí)行其他語句的方法

    pycharm在調(diào)試python時(shí)執(zhí)行其他語句的方法

    今天小編就為大家分享一篇pycharm在調(diào)試python時(shí)執(zhí)行其他語句的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • Python3 shutil(高級(jí)文件操作模塊)實(shí)例用法總結(jié)

    Python3 shutil(高級(jí)文件操作模塊)實(shí)例用法總結(jié)

    在本篇文章里小編給大家整理的是一篇關(guān)于Python3 shutil實(shí)例用法內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2020-02-02
  • python調(diào)用外部程序的實(shí)操步驟

    python調(diào)用外部程序的實(shí)操步驟

    在本文里小編給大家分享了關(guān)于python如何調(diào)用外部程序的步驟和相關(guān)知識(shí)點(diǎn),需要的朋友們學(xué)習(xí)下。
    2019-03-03
  • win10系統(tǒng)下如何徹底卸載anaconda3

    win10系統(tǒng)下如何徹底卸載anaconda3

    最近跑代碼的時(shí)候老出現(xiàn)各種錯(cuò)誤,因?yàn)橹靶遁d過一次anaconda,所以猜測可能是沒有卸載干凈,所以又重新卸載了一遍,下面這篇文章主要給大家介紹了關(guān)于win10系統(tǒng)下如何徹底卸載anaconda3的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • pyecharts繪制各種數(shù)據(jù)可視化圖表案例附效果+代碼

    pyecharts繪制各種數(shù)據(jù)可視化圖表案例附效果+代碼

    這篇文章主要介紹了pyecharts繪制各種數(shù)據(jù)可視化圖表案例并附效果和代碼,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,感興趣的小伙伴可以參考一下
    2022-06-06
  • python制作爬蟲并將抓取結(jié)果保存到excel中

    python制作爬蟲并將抓取結(jié)果保存到excel中

    本文給大家記錄的是使用Python制作爬蟲爬取拉勾網(wǎng)信息并將結(jié)果保存到Excel中的實(shí)現(xiàn)思路及方法,并附上最終源碼,有需要的小伙伴可以參考下
    2016-04-04
  • 聊聊Python對(duì)CSV文件的讀取與寫入問題

    聊聊Python對(duì)CSV文件的讀取與寫入問題

    今天抽空給大家介紹下Python對(duì)CSV文件的讀取與寫入問題,首先需要在python環(huán)境里導(dǎo)入csv板塊,下面就通過實(shí)例代碼給大家詳細(xì)介紹下,感興趣的朋友跟隨小編一起看看吧
    2021-11-11
  • Python 異常處理實(shí)例詳解

    Python 異常處理實(shí)例詳解

    python提供了兩個(gè)非常重要的功能(異常處理和斷言(Assertions))來處理python程序在運(yùn)行中出現(xiàn)的異常和錯(cuò)誤,你可以使用該功能來捕捉python程序的異常
    2014-03-03
  • django的使用步驟入門教程(很詳細(xì))

    django的使用步驟入門教程(很詳細(xì))

    隨著IT行業(yè)的不斷發(fā)展,編程學(xué)習(xí)也越來越重要,很多人都開啟了很多計(jì)算機(jī)語言的學(xué)習(xí),下面這篇文章主要給大家介紹了關(guān)于django的使用步驟入門教程,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05

最新評(píng)論