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

首頁 > 編程 > Python > 正文

Python實現(xiàn)二叉樹結(jié)構(gòu)與進行二叉樹遍歷的方法詳解

2019-11-25 16:47:01
字體:
供稿:網(wǎng)友

二叉樹的建立

2016524100535096.png (500×249)

使用類的形式定義二叉樹,可讀性更好

class BinaryTree:  def __init__(self, root):    self.key = root    self.left_child = None    self.right_child = None  def insert_left(self, new_node):    if self.left_child == None:      self.left_child = BinaryTree(new_node)    else:      t = BinaryTree(new_node)      t.left_child = self.left_child      self.left_child = t  def insert_right(self, new_node):    if self.right_child == None:      self.right_child = BinaryTree(new_node)    else:      t = BinaryTree(new_node)      t.right_child = self.right_child      self.right_child = t  def get_right_child(self):    return self.right_child  def get_left_child(self):    return self.left_child  def set_root_val(self, obj):    self.key = obj  def get_root_val(self):    return self.keyr = BinaryTree('a')print(r.get_root_val())print(r.get_left_child())r.insert_left('b')print(r.get_left_child())print(r.get_left_child().get_root_val())r.insert_right('c')print(r.get_right_child())print(r.get_right_child().get_root_val())r.get_right_child().set_root_val('hello')print(r.get_right_child().get_root_val())

Python進行二叉樹遍歷

需求:
python代碼實現(xiàn)二叉樹的:
1. 前序遍歷,打印出遍歷結(jié)果
2. 中序遍歷,打印出遍歷結(jié)果
3. 后序遍歷,打印出遍歷結(jié)果
4. 按樹的level遍歷,打印出遍歷結(jié)果
5. 結(jié)點的下一層如果沒有子節(jié)點,以‘N'代替

方法:
使用defaultdict或者namedtuple表示二叉樹
使用StringIO方法,遍歷時寫入結(jié)果,最后打印出結(jié)果
打印結(jié)點值時,如果為空,StringIO()寫入‘N '
采用遞歸訪問子節(jié)點
代碼

#!/usr/bin/env python3# -*- coding: utf-8 -*-# test tree as below:''' 1 / / / / / / / / 2 3 / / / / / / / / 4 5 6 N / / / / / / 7 N N N 8 9 / / / / / / N N N N N N '''from collections import namedtuplefrom io import StringIO#define the node structureNode = namedtuple('Node', ['data', 'left', 'right'])#initialize the treetree = Node(1,      Node(2,         Node(4,           Node(7, None, None),           None),         Node(5, None, None)),      Node(3,         Node(6,           Node(8, None, None),           Node(9, None, None)),         None))#read and write str in memoryoutput = StringIO()#read the node and write the node's value#if node is None, substitute with 'N 'def visitor(node):  if node is not None:    output.write('%i ' % node.data)  else:    output.write('N ')#traversal the tree with different orderdef traversal(node, order):  if node is None:    visitor(node)  else:    op = {        'N': lambda: visitor(node),        'L': lambda: traversal(node.left, order),        'R': lambda: traversal(node.right, order),    }    for x in order:      op[x]()#traversal the tree level by leveldef traversal_level_by_level(node):  if node is not None:    current_level = [node]    while current_level:      next_level = list()      for n in current_level:        if type(n) is str:          output.write('N ')        else:          output.write('%i ' % n.data)          if n.left is not None:            next_level.append(n.left)          else:            next_level.append('N')          if n.right is not None:            next_level.append(n.right)          else:            next_level.append('N ')      output.write('/n')      current_level = next_levelif __name__ == '__main__':  for order in ['NLR', 'LNR', 'LRN']:    if order == 'NLR':      output.write('this is preorder traversal:')      traversal(tree, order)      output.write('/n')    elif order == 'LNR':      output.write('this is inorder traversal:')      traversal(tree, order)      output.write('/n')    else:      output.write('this is postorder traversal:')      traversal(tree, order)      output.write('/n')  output.write('traversal level by level as below:'+'/n')  traversal_level_by_level(tree)  print(output.getvalue())

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 綦江县| 崇信县| 高邑县| 额尔古纳市| 花莲县| 剑阁县| 焉耆| 屏东县| 高尔夫| 北流市| 永年县| 新田县| 白沙| 吴堡县| 茌平县| 汾西县| 资兴市| 习水县| 京山县| 扶绥县| 榆社县| 视频| 屏边| 惠水县| 婺源县| 顺义区| 潞西市| 梨树县| 玉环县| 精河县| 布拖县| 大兴区| 京山县| 建湖县| 东莞市| 石城县| 灵寿县| 淄博市| 白沙| 教育| 三明市|