python实现二叉树的遍历

一时失言乱红尘 2024-03-02 09:24 71阅读 0赞

1 问题

何利用python进行二叉树的遍历。

2 方法**:**

  1. 通过创建节点与构建树。
  2. 通过借助队列来实现层遍历,再实现后序的遍历

代码清单 1







#每个节点有两个后继节点,分别为左子节点和右子节点
class Node():
   def init(self, item):
       self.elem = item
       self.lchild = None
       self.rchild = None
#每个树有个根节点
class Tree():
   def init(self):
       self.root = None
#树具有一个层次结构,从根节点最高层到最低层,每层从左向右遍历。需要借助队列实现
def leveltravel(self):
   if self.root == None:
       return
   queue = [self.root]
   while queue:
       cur = node = queue.pop(0)
       print(cur.elem, end=” “)
       if cur.lchild != None:
           queue.append(cur.lchild)
       if cur.rchild != None:
           queue.append(cur.rchild)
#树具有一个层次结构,我们在每层按照从左至右的方向添加节点
def add(self, item):
   node = Node(item)
   # 如果节点为空
   if self.root == None:
       self.root = node
       return
   queue = [self.root]
   while queue:
       cur = queue.pop(0)
       if cur.lchild == None:
           cur.lchild = node
           return
       else:
           queue.append(cur.lchild)
       if cur.rchild == None:
           cur.rchild = node
           return
       else:
           queue.append(cur.rchild)
#先序遍历是先遍历根节点,再遍历左子树,最后遍历右子树。
def preordertravel(self, node):
   # 如果节点为空
   if node == None:
       return
   print(node.elem, end=” “)
   self.preordertravel(node.lchild)
   self.preordertravel(node.rchild)
#中序遍历则先遍历左子树,再遍历根节点,最后遍历右子树。
def inorder_travel(self, node):
   # 如果节点为空
   if node == None:
       return
   self.inorder_travel(node.lchild)
   print(node.elem, end=” “)
   self.inorder_travel(node.rchild)
#后续遍历先遍历左子树,再遍历右子树,最后遍历根节点。
def postorder_travel(self, node):
   # 如果节点为空
   if node == None:
       return
   self.postorder_travel(node.lchild)
   self.postorder_travel(node.rchild)
   print(node.elem, end=” “)
#测试
if __name
== “__main
“:
   t = Tree()
   t.add(0)
   t.add(1)
   t.add(2)
   t.add(3)
   t.add(4)
   t.add(5)
   t.add(6)
   t.add(7)
   t.add(8)
   t.add(9)
   t.level_travel()
   print()
   t.preorder_travel(t.root)
   print()
   t.inorder_travel(t.root)
   print()
   t.postorder_travel(t.root)
   print()

3 结语

在链表中,一个节点只能有一个后继节点和前驱节点。而在 树中,一个节点可以有多个后继节点,但只能有一个前驱节点。节点的 度表示有几个后继节点, 树的度是最大的节点的度。二叉树是度为 2 的树。

在树中,没有前驱节点的节点称为根节点,没有后继节点的节点称为叶子节点。前驱节点也称为父节点,后继节点也称为子节点。具有相同父节点的节点称为兄弟节点。

需要借助队列实现层遍历,而进而的前序中序后序遍历的实现都类似层遍历。

发表评论

表情:
评论列表 (有 0 条评论,71人围观)

还没有评论,来说两句吧...

相关阅读

    相关 python实现

    遍历二叉树就是以一定的规则将二叉树中的结点排列成一个线性序列,从而得到二叉树节点的各种遍历序列。其实质就是对一个非线性结构进行线性操作,使在这个序列中,除了第一个和最后一个结点

    相关 c++实现

    //自己还真是个菜鸡,大一学了一年c++,现在还在基础的语法上转圈,还没有意识到c++真正的 //的强大之处在于它的多变,封装,等算法告一段落了在考虑是往Jav

    相关 python

    从二叉树的根节点出发,节点的遍历分为三个主要步骤:对当前节点进行操作(称为“访问”节点,或者根节点)、遍历左边子节点、遍历右边子节点。访问节点顺序的不同也就形成了不同的遍历方式