Python 递归式实现二叉树前序,中序,后序遍历
作者:步木木 发布时间:2022-09-22 17:38:32
标签:Python,递归式,二叉树,前序,中序,后序,遍历
记忆点:
前序:VLR
中序:LVR
后序:LRV
举例:
一颗二叉树如下图所示:
则它的前序、中序、后序遍历流程如下图所示:
1.前序遍历
class Solution:
def preorderTraversal(self, root: TreeNode):
def preorder(root: TreeNode):
if not root:
return
res.append(root.val)
preorder(root.left)
preorder(root.right)
res = []
preorder(root)
return res
2.中序遍历
class Solution:
def inorderTraversal(self, root: TreeNode):
def inorder(root: TreeNode):
if not root:
return
inorder(root.left)
res.append(root.val)
inorder(root.right)
res = []
inorder(root)
return res
3.后序遍历
class Solution:
def postorderTraversal(self, root: TreeNode):
def postorder(root: TreeNode):
if not root:
return
postorder(root.left)
res.append(root.val)
postorder(root.right)
res = []
postorder(root)
return res
4.测试
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
# 用列表递归创建二叉树
def createTree(root,list_n,i):
if i <len(list_n):
if list_n[i] == 'null':
return None
else:
root = TreeNode(val = list_n[i])
root.left = createTree(root.left,list_n,2*i+1)
root.right = createTree(root.right,list_n,2*i+2)
return root
return root
class Solution:
def preorderTraversal(self, root: TreeNode): # 前序
def preorder(root: TreeNode):
if not root:
return
res.append(root.val)
preorder(root.left)
preorder(root.right)
res = []
preorder(root)
return res
def inorderTraversal(self, root: TreeNode): # 中序
def inorder(root: TreeNode):
if not root:
return
inorder(root.left)
res.append(root.val)
inorder(root.right)
res = []
inorder(root)
return res
def postorderTraversal(self, root: TreeNode): # 后序
def postorder(root: TreeNode):
if not root:
return
postorder(root.left)
postorder(root.right)
res.append(root.val)
res = []
postorder(root)
return res
if __name__ == "__main__":
root = TreeNode()
list_n = [1,2,3,4,5,6,7,8,'null',9,10]
root = createTree(root,list_n,0)
s = Solution()
res_pre = s.preorderTraversal(root)
res_in = s.inorderTraversal(root)
res_post = s.postorderTraversal(root)
print(res_pre)
print(res_in)
print(res_post)
5.结果
6.补充
6.1N叉树前序遍历
"""
# Definition for a Node.
class Node:
def __init__(self, val=None, children=None):
self.val = val
self.children = children
"""
class Solution:
def postorder(self, root: 'Node') -> List[int]:
def seq(root):
if not root:
return
res.append(root.val)
for child in root.children:
seq(child)
res = []
seq(root)
return res
N叉树后序遍历
"""
# Definition for a Node.
class Node:
def __init__(self, val=None, children=None):
self.val = val
self.children = children
"""
class Solution:
def postorder(self, root: 'Node') -> List[int]:
def seq(root):
if not root:
return
for child in root.children:
seq(child)
res.append(root.val)
res = []
seq(root)
return res
来源:https://blog.csdn.net/weixin_44241793/article/details/123280376


猜你喜欢
- 1.核心代码使用py2neo连接neo4j的方法:from py2neo import Graphgraph = Graph("h
- cmd中输入net start mysql 提示:服务名无效请进入MySQL的bin目录,并在bin目录打开命令行窗口,或设置系统环境变量,
- 之前在某本书上看到一个程序,可以通过 Python 记录下全局范围内的键盘事件,使用的是 ctypes 库。后来几经尝试,始终不能成功运行。
- 本文实例为大家分享了微信小程序实现通讯录功能的具体代码,供大家参考,具体内容如下微信小程序模仿通讯录功能需要用到scroll-view标签思
- os.makedir(path)和os.makedirs(path)今天工作中将hadoop文件同步到服务器磁盘,由于文件类别目录较多,迁移
- 这篇文章主要介绍了Python如何在DataFrame增加数值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,
- 程序需求:输入用户名,密码认证成功显示欢迎信息输入错误三次后锁定用户流程图:好像画的不咋地查看代码:#!/usr/bin/env pytho
- 一、Jenkins 是什么?Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。二、准备工作安
- 什么是SeleniumSelenium是一个用于测试网站的自动化测试工具,支持各种浏览器包括Chrome、Firefox、Safari等主流
- 场景说明假设有一个mysql表被水平切分,分散到多个host中,每个host拥有n个切分表。 如果需要并发去访问这些表,快速得到查询结果,
- 本文详细罗列归纳了Python常见数据结构,并附以实例加以说明,相信对读者有一定的参考借鉴价值。总体而言Python中常见的数据结构可以统称
- <?php interface js{ function ys($a,$b); } class Af implements js{ f
- 前言前面几篇简单介绍了一下前端与PHP的一些知识点,前端中表单提交是一个非常重要的模块,在本篇中我会介绍一些关于表单的知识,如果前面内容你掌
- '************************************* '读取文件 &
- 操作系统: CentOS 6.9_x64go语言版本: 1.8.3问题描述golang的log模块提供的有写日志功能,示例代码如下:/*go
- 安装redis服务1 下载redis cd /usr/local/ 进入安装目录 wget http://downl
- 删除文件os.remove( filename ) # filename: "要删
- Softmax原理Softmax函数用于将分类结果归一化,形成一个概率分布。作用类似于二分类中的Sigmoid函数。对于一个k维向量z,我们
- python是很容易上手的编程语言,但是有些时候使用python编写的程序并不能保证其运行速度(例如:while 和 for),这个时候我们
- 大部分数据库管理员拥有某种形式的数据库元数据库,他们依赖其来跟踪范围很广的Microsoft SQL Server环境。我利用连接的服务器和