国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python二叉樹定義與遍歷方法實例分析

2020-02-23 00:15:55
字體:
來源:轉載
供稿:網友

本文實例講述了Python二叉樹定義與遍歷方法。分享給大家供大家參考,具體如下:

二叉樹基本概述:

二叉樹是有限個元素的幾個,如果為空則為空二叉樹,或者有一個結點稱之為根節點,分列根節點兩側的為二叉樹的左右子節點,二叉樹有如下的性質:

1. 二叉樹的每個結點不存在度大于2的結點
2. 二叉樹的第i層至多有2^{i-1}個結點
3. 深度為k的二叉樹至多有2^k - 1個結點
4. 二叉樹中,度為0的結點數N0比度為2的結點數N2大1,即存在N2 + 1 = N0

Python代碼:

#coding:utf-8'BiTree'class Node(object):  'Node Defination'  def __init__(self,item):    self.item = item    self.left = None    self.right = Noneclass Tree(object):  'Bitree Defination'  def __init__(self):    self.root = None  def add(self,item):    node = Node(item)    if self.root is None:      self.root = node    else:      q = [self.root]      while True:        pop_node = q.pop(0)        if pop_node.left is None:          pop_node.left = node          return        elif pop_node.right is None:          pop_node.right = node          return        else:          q.append(pop_node.left)          q.append(pop_node.right)  def traverse(self):#層次遍歷    if self.root is None:      return None    q = [self.root]    res = [self.root.item]    while q != []:      pop_node = q.pop(0)      if pop_node.left is not None:        q.append(pop_node.left)        res.append(pop_node.left.item)      if pop_node.right is not None:        q.append(pop_node.right)        res.append(pop_node.right.item)    return res  def preorder(self,root): #先序遍歷    if root is None:      return []    result = [root.item]    left_item = self.preorder(root.left)    right_item = self.preorder(root.right)    return result + left_item + right_item  def inorder(self,root): #中序遍歷    if root is None:      return []    result = [root.item]    left_item = self.inorder(root.left)    right_item = self.inorder(root.right)    return left_item + result + right_item  def postorder(self,root): #后序遍歷    if root is None:      return []    result = [root.item]    left_item = self.postorder(root.left)    right_item = self.postorder(root.right)    return left_item + right_item + resultif __name__=='__main__':  t = Tree()  for i in range(10):    t.add(i)  print "層序遍歷:",t.traverse()  print "先序遍歷:",t.preorder(t.root)  print "中序遍歷:",t.inorder(t.root)  print "后序遍歷:",t.postorder(t.root)

輸出結果:

層序遍歷: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
先序遍歷: [0, 1, 3, 7, 8, 4, 9, 2, 5, 6]
中序遍歷: [7, 3, 8, 1, 9, 4, 0, 5, 2, 6]
后序遍歷: [7, 8, 3, 9, 4, 1, 5, 6, 2, 0]

這里對于

if __name__=='__main__':“Make a script both importable and executable”

意思就是說讓你寫的腳本模塊既可以導入到別的模塊中用,另外該模塊自己也可執行。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 绥阳县| 花莲市| 溧水县| 建德市| 察雅县| 安乡县| 佛冈县| 曲阜市| 吉林省| 道孚县| 岗巴县| 深州市| 和龙市| 沈丘县| 焦作市| 静安区| 亳州市| 黔西| 西乡县| 拜泉县| 曲松县| 洮南市| 南康市| 邹城市| 万载县| 沂水县| 大理市| 赤城县| 宜昌市| 九江市| 江安县| 辉南县| 灌云县| 五大连池市| 安徽省| 临夏县| 大悟县| 饶平县| 合作市| 西充县| 达日县|