二叉树的遍历(Python)

原创 2018年04月16日 16:41:37

二叉树的遍历(Python)

标签(空格分隔): 二叉树


用Python实现二叉树的遍历。
定义树的节点:

class Node():
    def __init__(self, item):
        self.value = item
        self.lchild = None
        self.rchild = None

定义树,初始化树为空,根节点为None。树结构每一个节点均为一个node类型的结构,将其组合成一个树形结构。
使用函数Addnode(self, item)添加节点。

class Tree():
    def __init__(self):
        self.root = None
    def Addnode(self, item):    #添加节点
        pass
    def PreOrderTraverse(self, root)    #前序遍历
        pass
    def InOrderTraverse(self, root)     #中序遍历
        pass
    def PostOrderTraverse(self, root)   #后序遍历
        pass

按照完全二叉树的顺序进行添加节点:

def Addnode(self, item):
    node = Node(item)

    if self.root == None:
        self.root = node

    else:
        q = [self.root]

        while True:
            pop_node = q.pop(0)
            if pop_node.lchild==None:
                pop_node.lchild = node
                return
            elif pop_node.rchild==None:
                pop_node.rchild = node
                return
            else:
                q.append(pop_node.lchild)
                q.append(pop_node.rchild)

首先使用添加的item生成Node节点,每个节点都包含三项value lchild rchild分别作为值,左孩子,右孩子。
如果树的根节点为None,则将node作为根节点root
否则,根节点暂存入list,循环顺序检查其lchild rchild如果存在空位置,则将node填入。如果当前根节点的左右孩子都存在,则将左右孩子存入list,并查看左孩子的情况,如果满将其左右孩子添加list,并查看当前根节点的右孩子,循环查找,直到找到空位插入node。最终得到完全二叉树。

前序遍历:PreOrderTraverse()

def PreOrderTraverse(self, root):
    '''preorder traverse
    前序遍历
    '''
    if root is None:
        return []
    result = [root.value]
    left_item = self.PreOrderTraverse(root.lchild)
    right_item = self.PreOrderTraverse(root.rchild)
    return result + left_item + right_item

使用递归的方法进行处理,依次处理根节点、左子树、右子树。当树为空时,返回空列表。
从根节点开始对齐左右子树进行递归遍历访问。由于每一层前序遍历可以看为根节点与左右孩子的交互,因此在递归到最底层时返回值的顺序即为遍历的顺序。
前序遍历的顺序为:根-左-右。所以返回值result + left_item + right_item

中序遍历:InOrderTraverse()。顺序为左-根-右

def InOrderTraverse(self, root):
    '''inorder traverse
    中序遍历
    '''
    if root is None:
        return []
    result = [root.value]
    left_item = self.InOrderTraverse(root.lchild)
    right_item = self.InOrderTraverse(root.rchild)
    return left_item + result +  right_item

后序遍历:PostOrderTraverse()。顺序为左-右-根

def PostOrderTraverse(self, root):
    '''postorder traverse
    后序遍历
    '''
    if root is None:
        return []
    result = [root.value]
    left_item = self.PostOrderTraverse(root.lchild)
    right_item = self.PostOrderTraverse(root.rchild)
    return left_item  +  right_item + result

三种遍历方式不同点仅在于递归的返回值,返回值顺序不同得到的遍历结果不同。
原因即在于,递归方法的返回值代表了所做的遍历方法的顺序。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34551188/article/details/79962691

【Python排序搜索基本算法】之二叉树的遍历

先给出二叉树节点的python表示: class Node: def __init__(self,value=None,left=None,right=None): self.value=val...
  • littlethunder
  • littlethunder
  • 2013-08-01 21:20:48
  • 12302

二叉树递归遍历的python实现

二叉树递归遍历
  • heavenmark
  • heavenmark
  • 2017-06-27 21:29:39
  • 1635

基于Python的二叉树遍历算法

今天用Python把二叉树的三种遍历都实现了一遍,用作学习Python的练手程序: #/usr/bin/python #coding: utf-8 from collections import d...
  • monkey_D_feilong
  • monkey_D_feilong
  • 2016-07-30 15:04:00
  • 312

二叉树的实现及四种常用遍历(python)

构造节点类 构造树类,并增加添加节点方法 前序遍历(根,左,右)、中序遍历(左,根,右),后序遍历(左,右,根) 利用队列实现广度优先遍历,即层次遍历 [引用]树的遍历主要有两种,...
  • qq_29631251
  • qq_29631251
  • 2017-06-20 15:18:13
  • 589

python实现二叉树和它的七种遍历

介绍:树是数据结构中非常重要的一种,主要的用途是用来提高查找效率,对于要重复查找的情况效果更佳,如二叉排序树、FP-树。另外可以用来提高编码效率,如哈弗曼树。 代码:用python实现树的构造和...
  • Bone_ACE
  • Bone_ACE
  • 2015-07-02 01:02:55
  • 27352

数据结构二叉树的遍历

  • 2009年11月21日 10:53
  • 2KB
  • 下载

二叉树的遍历

  • 2011年12月23日 10:32
  • 38KB
  • 下载

python实现二叉树及其七种遍历方式(递归+非递归)

1、二叉树的遍历方式? 前序遍历:根左右 中序遍历:左根右 后序遍历:左右根 层次遍历:从上到下,从左到右 2、python新建一个二叉树及其七种遍历(递归和非递归) class No...
  • lq_lq314
  • lq_lq314
  • 2018-01-27 16:10:43
  • 305

python二叉树的遍历

觉得这个挺有趣的,记录一下# -*- coding: utf-8 -*-class TreeNode(object):    def __init__(self,data=None,left=None...
  • Meet33
  • Meet33
  • 2018-03-05 14:51:52
  • 45

二叉树遍历算法总结

二叉树遍历算法总结        A.  二叉树的遍历       1.前序遍历二叉树:         (1)若二叉树为空,则为空操作,返回空。         (2)访问根结点。        ...
  • wp1603710463
  • wp1603710463
  • 2016-03-20 18:43:19
  • 3703
收藏助手
不良信息举报
您举报文章:二叉树的遍历(Python)
举报原因:
原因补充:

(最多只允许输入30个字)