记忆点:


前序: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 递归式实现二叉树前序、中序、后序遍历相关推荐

  1. 二叉树的深度(前序 中序 后序 递归非递归搜素)、广度、搜索 C++

    a b c 使用 1 2 3 表示 /* 描述:二叉树的深度(前序 中序 后序 递归非递归搜素).广度.搜索 作者:jz 日期:20140819 */ #include<stdio.h> ...

  2. 【二叉树Java】二叉树遍历前序中序后序遍历的非递归写法

    本文主要介绍二叉树前序中序后序遍历的非递归写法 在探讨如何写出二叉树的前序中序后序遍历代码之前,我们先来明确一个问题,前序中序后序遍历根据什么区分? 二叉树的前序中序后序遍历,是相较根节点说的.最先遍 ...

  3. 二叉树遍历(递归实现前序/中序/后序遍历)

    1. 准备工作 我们先定义一棵普通的二叉树,如下图 2. 前序遍历 通过递归进行遍历: 如果二叉树为空,则操作返回: 如果非空,否则从根结点开始,然后遍历左子树,再遍历右子树. 前序遍历的结果是:AB ...

  4. 二叉树前序中序,后序中序,公共最近祖先的实现

    二叉树前序中序,后序中序,公共最近祖先的实现 注释中详细介绍了算法,故不再赘述. 无论是前序还是后序,一个节点的左子树和右子树都是可以看做是分开的,有一定规律可循,故可用递归进行实现. #includ ...

  5. java中二叉树_Java工程师面试1000题224-递归非递归实现二叉树前、中、后序遍历...

    224.使用递归和非递归实现二叉树的前.中.后序遍历 使用递归来实现二叉树的前.中.后序遍历比较简单,直接给出代码,我们重点讨论非递归的实现. class Node { public int valu ...

  6. C++实现二叉树 前、中、后序遍历(递归与非递归)非递归实现过程最简洁版本

    本文并非我所写,是复制的该链接中的内容: 最近学习二叉树,想编程实现递归和非递归的实现方式: 递归的方式就不说了,因为大家的递归程序都一样:但是对于非递归的实现方式, 根据这几天的查阅资料已看到差不多 ...

  7. 前序中序、中序后序以及前序后序构造二叉树

    文章目录 前序中序 中序后序 前序后序 定义的树节点如下, class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) { ...

  8. 序列化和反序列化二叉树 -----前序,中序,后序,层序

    目录 一.序列化和反序列化 1.什么是序列化和反序列化 二.前序遍历 1.序列化 1.问题分析 2.代码实现 2.反序列化 1.问题分析 2.代码实现 三.后序遍历 1.序列化 1.思路分析 2.代码 ...

  9. 二叉树的前序中序后序遍历

    二叉树的前序中序后序遍历 二叉树的遍历 前序遍历 中序遍历 后序遍历 总结 二叉树的遍历 二叉树的遍历有前序遍历,中序遍历,后序遍历三种. 今天我把二叉树的遍历方法给大家总结一下,也算对我自己学习的一 ...

最新文章

  1. Django Response对象3.4
  2. Cordic算法——verilog实现
  3. asp sql查询过滤空格_对比Excel,轻松学习SQL数据分析数据笔记02
  4. 牛客NOIP2021提高组OI赛前模拟赛第一场T3——与巨(数学)
  5. 安排!活动素材的亿级用户精准投放
  6. Windows 10如何消除文件夹右上角的“相对箭头”?
  7. 华为手机媒体音量自动静音_华为手机的音量键原来这么牛逼,这五大玩法,97.777%的人不知道...
  8. 铁汁儿们,现在面试阿里巴巴必考K8S
  9. 本田2022年新车将搭载谷歌Automotive OS
  10. Ubuntu16.0.4 通过Docker安装酷Q
  11. html转pdf分页问题
  12. 马云、奥巴马都上当:“女版乔布斯”600亿惊天骗局,电影都不敢这么拍
  13. 百度关键词搜索量查询,百度,谷歌关键词查询工具
  14. element-ui el-descriptions取消冒号
  15. JAVA内存泄漏原因和检测工具
  16. 制度罚则-- 日志规范
  17. Google 正式开源 Paranoid
  18. 【第1164期】从前端技术到体验科技
  19. TensorFlow之XLA
  20. C#上位机开发—— 修改窗口图标和exe文件图标

热门文章

  1. 量化投资 — 简单均值回归策略(Mean Reverting Strategy)
  2. Office 2003英文版 如何增加繁体简体转换的功能?
  3. java内部类是干什么的_Java内部类有什么作用
  4. gcc 生成动态链接库
  5. [论文翻译]FLOT: Scene Flow on Point Clouds Guided by Optimal Transport(ECCV 2020)
  6. linux系统文件描述符详解
  7. c语言 结构体 初始化,C语言结构体初始化
  8. C#入门简单计算矩形面积程序
  9. LTE 中的带宽初探
  10. 谷歌『云开发者速查表』;清华3D人体数据集;商汤『通用视觉框架』公开课;Web3极简入门指南;高效深度学习免费书;前沿论文 | ShowMeAI资讯日报