最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python實(shí)現(xiàn)的二叉樹定義與遍歷算法實(shí)例

 更新時(shí)間:2017年06月30日 10:09:09   作者:ZHOU YANG  
這篇文章主要介紹了python實(shí)現(xiàn)的二叉樹定義與遍歷算法,結(jié)合具體實(shí)例形式分析了基于Python定義的二叉樹及其常用遍歷操作實(shí)現(xiàn)技巧,需要的朋友可以參考下

本文實(shí)例講述了python實(shí)現(xiàn)的二叉樹定義與遍歷算法。分享給大家供大家參考,具體如下:

初學(xué)python,需要實(shí)現(xiàn)一個(gè)決策樹,首先實(shí)踐一下利用python實(shí)現(xiàn)一個(gè)二叉樹數(shù)據(jù)結(jié)構(gòu)。建樹的時(shí)候做了處理,保證建立的二叉樹是平衡二叉樹。

# -*- coding: utf-8 -*-
from collections import deque
class Node:
  def __init__(self,val,left=None,right=None):
    self.val=val
    self.left=left
    self.right=right
  #setter and getter
  def get_val(self):
    return self.val
  def set_val(self,val):
    self.val=val
  def get_left(self):
    return self.left
  def set_left(self,left):
    self.left=left
  def get_right(self):
    return self.right
  def set_right(self,right):
    self.right=right
class Tree:
  def __init__(self,list):
    list=sorted(list)
    self.root=self.build_tree(list)
  #遞歸建立平衡二叉樹
  def build_tree(self,list):
    l=0
    r=len(list)-1
    if(l>r):
      return None
    if(l==r):
      return Node(list[l])
    mid=(l+r)/2
    root=Node(list[mid])
    root.left=self.build_tree(list[:mid])
    root.right=self.build_tree(list[mid+1:])
    return root
  #前序遍歷
  def preorder(self,root):
    if(root is None):
      return
    print root.val
    self.preorder(root.left)
    self.preorder(root.right)
  #后序遍歷
  def postorder(self,root):
    if(root is None):
      return
    self.postorder(root.left)
    self.postorder(root.right)
    print root.val
  #中序遍歷
  def inorder(self,root):
    if(root is None):
      return
    self.inorder(root.left)
    print root.val
    self.inorder(root.right)
  #層序遍歷
  def levelorder(self,root):
    if root is None:
      return
    queue =deque([root])
    while(len(queue)>0):
      size=len(queue)
      for i in range(size):
        node =queue.popleft()
        print node.val
        if node.left is not None:
          queue.append(node.left)
        if node.right is not None:
          queue.append(node.right)
list=[1,-1,3,4,5]
tree=Tree(list)
print '中序遍歷:'
tree.inorder(tree.root)
print '層序遍歷:'
tree.levelorder(tree.root)
print '前序遍歷:'
tree.preorder(tree.root)
print '后序遍歷:'
tree.postorder(tree.root)

輸出:

中序遍歷
-1
1
3
4
5
層序遍歷
3
-1
4
1
5
前序遍歷
3
-1
1
4
5
后序遍歷
1
-1
5
4
3

建立的二叉樹如下圖所示:

PS:作者的github: https://github.com/zhoudayang

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

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

相關(guān)文章

  • python讀寫csv文件并增加行列的實(shí)例代碼

    python讀寫csv文件并增加行列的實(shí)例代碼

    這篇文章主要介紹了python讀寫csv文件并增加行列的實(shí)現(xiàn)方法,文中給大家介紹了python寫入csv文件的幾種方法總結(jié),給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Python零基礎(chǔ)入門學(xué)習(xí)之輸入與輸出

    Python零基礎(chǔ)入門學(xué)習(xí)之輸入與輸出

    在之前的編程中,我們的信息打印,數(shù)據(jù)的展示都是在控制臺(tái)(命令行)直接輸出的,信息都是一次性的沒有辦法復(fù)用和保存以便下次查看,今天我們將學(xué)習(xí)Python的輸入輸出,解決以上問題
    2019-04-04
  • 安裝pytorch報(bào)錯(cuò)torch.cuda.is_available()=false問題的解決過程

    安裝pytorch報(bào)錯(cuò)torch.cuda.is_available()=false問題的解決過程

    最近想用pytorch,因此裝了pytorch,但是碰到了問題,下面這篇文章主要給大家介紹了關(guān)于安裝pytorch報(bào)錯(cuò)torch.cuda.is_available()=false問題的解決過程,需要的朋友可以參考下
    2022-05-05
  • Python使用pandas實(shí)現(xiàn)對(duì)數(shù)據(jù)進(jìn)行特定排序

    Python使用pandas實(shí)現(xiàn)對(duì)數(shù)據(jù)進(jìn)行特定排序

    在數(shù)據(jù)分析和處理過程中,排序是一項(xiàng)常見而重要的操作,本文將詳細(xì)介紹如何利用pandas對(duì)數(shù)據(jù)進(jìn)行特定排序,包括基本排序、多列排序、自定義排序規(guī)則等方面的內(nèi)容,需要的可以了解下
    2024-03-03
  • Python中的切片函數(shù)Slice詳解

    Python中的切片函數(shù)Slice詳解

    這篇文章主要介紹了Python中的切片函數(shù)Slice詳解,切片是對(duì)有序的集合而言,意思從有序集合里提取數(shù)據(jù)構(gòu)成子集集合,給定提取的起點(diǎn)start、終點(diǎn)end以及方向上的步長step,能否切出非空子集,起點(diǎn)start需能沿步長方向上到達(dá)終點(diǎn),需要的朋友可以參考下
    2023-09-09
  • 詳解Python中xlsxwriter庫的基本操作

    詳解Python中xlsxwriter庫的基本操作

    xlsxwriter是一個(gè)用于創(chuàng)建和修改Excel文件(.xlsx)的Python庫,它提供了豐富的功能,可以創(chuàng)建復(fù)雜的Excel工作簿,本文為大家介紹了它的一些基本操作,希望對(duì)大家有所幫助
    2023-11-11
  • python中異常報(bào)錯(cuò)處理方法匯總

    python中異常報(bào)錯(cuò)處理方法匯總

    之前在學(xué)習(xí)python的時(shí)候有整理過python異常處理的文章,不夠簡單也不夠完整,所以決定再整理一篇,算做補(bǔ)充,大家學(xué)習(xí)一下,就可以自己思考解決方法了,希望對(duì)大家能夠有所幫助
    2016-11-11
  • 使用python將多個(gè)excel文件合并到同一個(gè)文件的方法

    使用python將多個(gè)excel文件合并到同一個(gè)文件的方法

    這篇文章主要介紹了使用python將多個(gè)excel文件合并到同一個(gè)文件的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • python3使用QQ郵箱發(fā)送郵件

    python3使用QQ郵箱發(fā)送郵件

    這篇文章主要為大家詳細(xì)介紹了python3使用QQ郵箱發(fā)郵件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • python實(shí)現(xiàn)查詢蘋果手機(jī)維修進(jìn)度

    python實(shí)現(xiàn)查詢蘋果手機(jī)維修進(jìn)度

    這篇文章主要介紹了python實(shí)現(xiàn)查詢蘋果手機(jī)維修進(jìn)度,這里用到了最重要的一個(gè)知識(shí)是python中如何設(shè)置cookie支持以及開啟調(diào)試模式,需要的朋友可以參考下
    2015-03-03

最新評(píng)論

宁城县| 东港市| 中山市| 龙州县| 九台市| 万全县| 汾西县| 迁安市| 卢湾区| 宁阳县| 花垣县| 漾濞| 陇川县| 丹棱县| 丹江口市| 开鲁县| 务川| 上杭县| 青海省| 合肥市| 岳池县| 临武县| 犍为县| 沈丘县| 安化县| 屏南县| 油尖旺区| 阜平县| 岳池县| 东乡| 重庆市| 麻城市| 穆棱市| 洞口县| 卢龙县| 永安市| 荥经县| 陕西省| 秭归县| 河西区| 安泽县|