关于二叉树以及对应的前序、中序、后序以及层次遍历

本文详细介绍了二叉树的基本概念及其三种主要遍历方法:前序、中序和后序遍历。通过实例演示了每种遍历方法的具体操作步骤,并提供了相应的Python代码实现。此外还介绍了层次遍历的概念及其实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二叉树是一种常用的数据结构,其基本样式大概如下图所示,这里不做过多介绍:在这里插入图片描述
对于上图正常的一个满节点(以这棵树的根节点A为例),A为根节点、B为左节点、E为右节点,其他节点类似。二叉树遍历分为三种:前序、中序、后序,对于上面节点来说,前序顺序是ABE(根节点排最先,然后同级先左后右);中序顺序是BAE(先左后根最后右);后序顺序是BEA(先左后右最后根)。而对于整个树形结构,B表示的是以B为根节点下面对应的子树,同样E表示的是以E为根节点对应下面的子树,因此上图二叉树的遍历结果为:

  • 前序遍历:ABCDEFGHK
  • 中序遍历:BDCAEHGKF
  • 后序遍历:DCBHKGFEA

为了进一步说明上述遍历结果的由来,可以参考下面说明(以中序为例,其他两种类似):
在这里插入图片描述
对于一棵二叉树,其根节点课表示成如下方式:

'''
根节点表示方法
'''
class BiTreeNode:
    def __init__(self, data):
        self.data = data
        self.lchild = None #左孩子
        self.rchild = None #右孩子

对于上面的树结构,表示如下:

'''
所有的根节点
'''
a = BiTreeNode('A')
b = BiTreeNode('B')
c = BiTreeNode('C')
d = BiTreeNode('D')
e = BiTreeNode('E')
f = BiTreeNode('F')
g = BiTreeNode('G')
h = BiTreeNode('H')
k = BiTreeNode('K')
'''
各节点之间的关系
'''
a.lchild=b
a.rchild=e
b.rchild=c
c.lchild=d
e.rchild=f
f.lchild=g
g.lchild=h
g.rchild=k

利用递归的思想实现上述三种遍历,其中:

  • 前序遍历(根、左、右):
def pre_order(root):
    if root:
        print(root.data, end='')
        pre_order(root.lchild)
        pre_order(root.rchild)
  • 中序遍历(左、根、右):
def in_order(root):
    if root:
        in_order(root.lchild)
        print(root.data, end='')
        in_order(root.rchild)

后序遍历(左、右、根):

def post_order(root):
    if root:
        post_order(root.lchild)
        post_order(root.rchild)
        print(root.data, end='')

补充:层次遍历
层次遍历就是按照从上到下,从左到右的顺序遍历一棵树,对于上述树结构,层次遍历的结果为:ABECFDGHK。对于这种遍历可以采用队列(先入先出)的方式实现,先将根节点入队列,当队列不为空时,出队列一个,并把出队列的左右子节点放入队列中,重复上述过程。程序具体实现如下:

def level_order(root):
    q=deque()
    q.append(root)
    while len(q)>0:
        x=q.popleft()
        print(x.data,end='')
        if x.lchild:
            q.append(x.lchild)
        if x.rchild:
            q.append(x.rchild)
二叉树前序、中后序遍历是树的三种常见遍历方式。在给定的引用内容中,可以找到关于二叉树前序、中后序遍历的代码实现。 前序遍历是指访问根节点,然后按照左后右的顺遍历左右子树。在给定的代码实现中,可以看到前序遍历的方法名为xianxu(),它会输出当前节点的数据,然后递归地调用左子树和右子树的xianxu()方法。 中遍历是指遍历左子树,然后访问根节点,最后遍历右子树。在给定的代码实现中,可以看到中遍历的方法名为zhongxu(),它会递归地调用左子树的zhongxu()方法,然后输出当前节点的数据,最后递归地调用右子树的zhongxu()方法。 后序遍历是指遍历左子树,然后遍历右子树,最后访问根节点。在给定的代码实现中,可以看到后序遍历的方法名为houxu(),它会递归地调用左子树和右子树的houxu()方法,然后输出当前节点的数据。 所以,根据给定的代码实现,二叉树前序、中后序遍历分别对应xianxu()、zhongxu()和houxu()方法。 #### 引用[.reference_title] - *1* [二叉树、中后序遍历超详解](https://blog.youkuaiyun.com/gqg_guan/article/details/127636880)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [二叉树、中后序以及层次遍历](https://blog.youkuaiyun.com/qq_50931436/article/details/121407707)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值