Python算法-二叉树深度优先遍历
二叉树
组成:
1、根节点 BinaryTree:root
2、每一个节点,都有左子节点和右子节点(可以为空) TreeNode:value、left、right
二叉树的遍历:
遍历二叉树:深度优先遍历、广度优先遍历。

广度:先遍历兄弟节点,再遍历子节点
深度:先遍历子节点,再遍历兄弟节点
上图深度遍历结果:50/20/60/15/30/70
上图广度遍历结果:50/20/15/30/60/70
深度遍历又分为先序、中序、后序的遍历方式:
先序遍历:先根节点,再左子树,再右子树
上图先序遍历结果:50/20/ 15/ 30/ 60/ 70
中序遍历:先左子树,再根节点,再右子树
上图中序遍历结果:15/20/30/50/60/70
后序遍历:先左子树,再右子树,再根节点
上图后序遍历结果:15/30/20/70/60/50
代码实现:
# encoding=utf-8
class TreeNode(object): #定义二叉树类
def __init__(self,val,left=None,right=None):
self.val = val
self.left = left
self.right = right
class BinaryTree(object):
def __init__(self,root=None):
self.root = root
def preScan(self,retList, node): #先序遍历:先跟、再左、后右
if node != None:
retList.append(node.val)
self.preScan(retList, node.left)
self.preScan(retList, node.right)
return retList
def midScan(self, retList, node): #中序遍历:先左、再跟、后右
if node != None:
self.midScan(retList, node.left)
retList.append(node.val)
self.midScan(retList, node.right)
return retList
def postScan(self, retList, node): #后序遍历:先左、再右、后跟
if node != None:
self.postScan(retList, node.left)
self.postScan(retList, node.right)
retList.append(node.val)
return retList
if __name__ =='__main__':
root = TreeNode(50)
root.left = TreeNode(20,left=TreeNode(15),right=TreeNode(30,right=TreeNode(12)))
root.right = TreeNode(60,right=TreeNode(70))
bTree = BinaryTree(root)
retList = bTree.preScan([],bTree.root)
print retList
retList2 = bTree.midScan([],bTree.root)
print retList2
retList3 = bTree.postScan([],bTree.root)
print retList3
Python算法-二叉树深度优先遍历的更多相关文章
- python算法-二叉树广度优先遍历
广度优先遍历:优先遍历兄弟节点,再遍历子节点 算法:通过队列实现-->先进先出 广度优先遍历的结果: 50,20,60,15,30,70,12 程序遍历这个二叉树: # encoding=utf ...
- 图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)
参考网址:图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS) - 51CTO.COM 深度优先遍历(Depth First Search, 简称 DFS) 与广度优先遍历(Breath ...
- C++ 二叉树深度优先遍历和广度优先遍历
二叉树的创建代码==>C++ 创建和遍历二叉树 深度优先遍历:是沿着树的深度遍历树的节点,尽可能深的搜索树的分支. //深度优先遍历二叉树void depthFirstSearch(Tree r ...
- 05 (OC) 二叉树 深度优先遍历和广度优先遍历
总结深度优先与广度优先的区别 1.区别 1) 二叉树的深度优先遍历的非递归的通用做法是采用栈,广度优先遍历的非递归的通用做法是采用队列. 2) 深度优先遍历:对每一个可能的分支路径深入到不能再深入 ...
- python实现二叉树的遍历以及基本操作
主要内容: 二叉树遍历(先序.中序.后序.宽度优先遍历)的迭代实现和递归实现: 二叉树的深度,二叉树到叶子节点的所有路径: 首先,先定义二叉树类(python3),代码如下: class TreeNo ...
- C++版 - 剑指Offer 面试题39:二叉树的深度(高度)(二叉树深度优先遍历dfs的应用) 题解
剑指Offer 面试题39:二叉树的深度(高度) 题目:输入一棵二叉树的根结点,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度.例如:输入二叉树 ...
- java算法----------二叉树的遍历
二叉树的遍历分为前序.中序.后序和层序遍历四种方式 首先先定义一个二叉树的节点 //二叉树节点 public class BinaryTreeNode { private int data; priv ...
- 基于python实现二叉树的遍历
""" 二叉树实践: 用递归构建树的遍历 # 思路分析 -- 1.使用链式存储,一个Node表示一个数的节点 -- 2.节点考虑使用两个属性变量,分别表示左连接右连接 & ...
- Python算法——二叉树
一.二叉树 from collections import deque class BiTreeNode: def __init__(self, data): self.data = data sel ...
随机推荐
- Coder(线段树)
求一部分和的线段树,因为是对5取余,所以给定一段区间a-b,假设其位置会有变化,最多会有5种和,那么就可以保留这五种和,在用lz进行延迟标记时,保存位置变化了多少也就知道了该从当前和转到哪一个和. 当 ...
- Oracle查询排序asc/desc 多列 order by
查询结果的排序 显示EMP表中不同的部门编号. 如果要在查询的同时排序显示结果,可以使用如下的语句: SELECT 字段列表 FROM 表名 WHERE 条件 ORDER BY 字段名1 [ASC|D ...
- jquery中ajax请求后台数据成功后既不执行success也不执行error解决方法
jquery中ajax请求后台数据成功后既不执行success也不执行error,此外系统报错:Uncaught SyntaxError: Unexpected identifier at Objec ...
- LR11安装和配置教程
LoadRunner11安装教程 #安装包文件.汉化文件.破解文件,可以自行百科来获得,这边仅提供安装步骤. 1.前期准备1)安装前需要关闭防火墙及杀毒软件2)安装路径不能包含中文字符,同时需要以管理 ...
- ASP.NET MVC执行流程图
- SnowKiting
原文 Let's go fly a kite...in the snow Reach into your closet,find that dusty kite and clean it off - ...
- 使用python模拟登陆百度
#!/usr/bin/python # -*- coding: utf- -*- """ Function: Used to demostrate how to use ...
- UVA10917 A walk trough the Forest (最短路,dp)
求出家到其他点的最短路径,题目的条件变成了u->v不是回头路等价于d[u]>d[v]. 然后根据这个条件建DAG图,跑dp统计方案数,dp[u] = sum(dp[v]). #includ ...
- Gym 100342I Travel Agency (Tarjan)
题意读懂了就好做了,就是求一下点双连通分量.维护一下一颗子树的结点数,对于一个结点当u是割点的时候, 统计一下u分割的连通分量v,每得到一个连通分量的结点数cnt(v)和之前连通分量结点数sum相乘一 ...
- vue的使用-项目总结
1,这是一个重前端逻辑,轻交互,数据展示的项目,可读性差,2,组件划分的坑,复用过多的坑,复用过多导致要在js手动判断太多东西,不便于可读3,vuex的坑,数据分为后台请求数据的暂存,前端页面逻辑的状 ...