Python 递归式实现二叉树前序、中序、后序遍历
记忆点:
前序:VLR
中序:LVR
后序:LRV
举例:
一颗二叉树如下图所示
则它的前序、中序、后序遍历流程如下图所示
前序遍历
class Solution:def preorderTraversal(self, root: TreeNode):def preorder(root: TreeNode):if not root:returnres.append(root.val)preorder(root.left) preorder(root.right)res = []preorder(root)return res
中序遍历
class Solution:def inorderTraversal(self, root: TreeNode):def inorder(root: TreeNode):if not root:returninorder(root.left)res.append(root.val)inorder(root.right)res = []inorder(root)return res
后序遍历
class Solution:def postorderTraversal(self, root: TreeNode):def postorder(root: TreeNode):if not root:returnpostorder(root.left)res.append(root.val)postorder(root.right)res = []postorder(root)return res
测试
class TreeNode:def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = right# 用列表递归创建二叉树
def createTree(root,list_n,i):if i <len(list_n):if list_n[i] == 'null':return Noneelse: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 rootclass Solution:def preorderTraversal(self, root: TreeNode): # 前序def preorder(root: TreeNode):if not root:returnres.append(root.val)preorder(root.left) preorder(root.right)res = []preorder(root)return resdef inorderTraversal(self, root: TreeNode): # 中序def inorder(root: TreeNode):if not root:returninorder(root.left)res.append(root.val)inorder(root.right)res = []inorder(root)return resdef postorderTraversal(self, root: TreeNode): # 后序def postorder(root: TreeNode):if not root:returnpostorder(root.left)postorder(root.right)res.append(root.val)res = []postorder(root)return resif __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)
结果
参考
1、python 用列表递归创建二叉树:link.
2、递归式遍历:link.
3、代码随想录二叉树的递归遍历:link
补充
N叉树前序遍历
"""
# Definition for a Node.
class Node:def __init__(self, val=None, children=None):self.val = valself.children = children
"""class Solution:def postorder(self, root: 'Node') -> List[int]:def seq(root):if not root:returnres.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 = valself.children = children
"""class Solution:def postorder(self, root: 'Node') -> List[int]:def seq(root):if not root:returnfor child in root.children:seq(child)res.append(root.val)res = []seq(root)return res
二叉树的层次遍历
class Solution:def levelorderTraversal(self, root: TreeNode): def seq(root, depth):if not root:return resif len(res) == depth:res.append([])res[depth].append(root.val)if root.left:seq(root.left, depth+1)if root.right:seq(root.right, depth+1)res = []seq(root, 0)return res
Python 递归式实现二叉树前序、中序、后序遍历相关推荐
- 二叉树的深度(前序 中序 后序 递归非递归搜素)、广度、搜索 C++
a b c 使用 1 2 3 表示 /* 描述:二叉树的深度(前序 中序 后序 递归非递归搜素).广度.搜索 作者:jz 日期:20140819 */ #include<stdio.h> ...
- 【二叉树Java】二叉树遍历前序中序后序遍历的非递归写法
本文主要介绍二叉树前序中序后序遍历的非递归写法 在探讨如何写出二叉树的前序中序后序遍历代码之前,我们先来明确一个问题,前序中序后序遍历根据什么区分? 二叉树的前序中序后序遍历,是相较根节点说的.最先遍 ...
- 二叉树遍历(递归实现前序/中序/后序遍历)
1. 准备工作 我们先定义一棵普通的二叉树,如下图 2. 前序遍历 通过递归进行遍历: 如果二叉树为空,则操作返回: 如果非空,否则从根结点开始,然后遍历左子树,再遍历右子树. 前序遍历的结果是:AB ...
- 二叉树前序中序,后序中序,公共最近祖先的实现
二叉树前序中序,后序中序,公共最近祖先的实现 注释中详细介绍了算法,故不再赘述. 无论是前序还是后序,一个节点的左子树和右子树都是可以看做是分开的,有一定规律可循,故可用递归进行实现. #includ ...
- java中二叉树_Java工程师面试1000题224-递归非递归实现二叉树前、中、后序遍历...
224.使用递归和非递归实现二叉树的前.中.后序遍历 使用递归来实现二叉树的前.中.后序遍历比较简单,直接给出代码,我们重点讨论非递归的实现. class Node { public int valu ...
- C++实现二叉树 前、中、后序遍历(递归与非递归)非递归实现过程最简洁版本
本文并非我所写,是复制的该链接中的内容: 最近学习二叉树,想编程实现递归和非递归的实现方式: 递归的方式就不说了,因为大家的递归程序都一样:但是对于非递归的实现方式, 根据这几天的查阅资料已看到差不多 ...
- 前序中序、中序后序以及前序后序构造二叉树
文章目录 前序中序 中序后序 前序后序 定义的树节点如下, class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) { ...
- 序列化和反序列化二叉树 -----前序,中序,后序,层序
目录 一.序列化和反序列化 1.什么是序列化和反序列化 二.前序遍历 1.序列化 1.问题分析 2.代码实现 2.反序列化 1.问题分析 2.代码实现 三.后序遍历 1.序列化 1.思路分析 2.代码 ...
- 二叉树的前序中序后序遍历
二叉树的前序中序后序遍历 二叉树的遍历 前序遍历 中序遍历 后序遍历 总结 二叉树的遍历 二叉树的遍历有前序遍历,中序遍历,后序遍历三种. 今天我把二叉树的遍历方法给大家总结一下,也算对我自己学习的一 ...
最新文章
- Django Response对象3.4
- Cordic算法——verilog实现
- asp sql查询过滤空格_对比Excel,轻松学习SQL数据分析数据笔记02
- 牛客NOIP2021提高组OI赛前模拟赛第一场T3——与巨(数学)
- 安排!活动素材的亿级用户精准投放
- Windows 10如何消除文件夹右上角的“相对箭头”?
- 华为手机媒体音量自动静音_华为手机的音量键原来这么牛逼,这五大玩法,97.777%的人不知道...
- 铁汁儿们,现在面试阿里巴巴必考K8S
- 本田2022年新车将搭载谷歌Automotive OS
- Ubuntu16.0.4 通过Docker安装酷Q
- html转pdf分页问题
- 马云、奥巴马都上当:“女版乔布斯”600亿惊天骗局,电影都不敢这么拍
- 百度关键词搜索量查询,百度,谷歌关键词查询工具
- element-ui el-descriptions取消冒号
- JAVA内存泄漏原因和检测工具
- 制度罚则-- 日志规范
- Google 正式开源 Paranoid
- 【第1164期】从前端技术到体验科技
- TensorFlow之XLA
- C#上位机开发—— 修改窗口图标和exe文件图标
热门文章
- 量化投资 — 简单均值回归策略(Mean Reverting Strategy)
- Office 2003英文版 如何增加繁体简体转换的功能?
- java内部类是干什么的_Java内部类有什么作用
- gcc 生成动态链接库
- [论文翻译]FLOT: Scene Flow on Point Clouds Guided by Optimal Transport(ECCV 2020)
- linux系统文件描述符详解
- c语言 结构体 初始化,C语言结构体初始化
- C#入门简单计算矩形面积程序
- LTE 中的带宽初探
- 谷歌『云开发者速查表』;清华3D人体数据集;商汤『通用视觉框架』公开课;Web3极简入门指南;高效深度学习免费书;前沿论文 | ShowMeAI资讯日报