二叉树

组成:

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算法-二叉树深度优先遍历的更多相关文章

  1. python算法-二叉树广度优先遍历

    广度优先遍历:优先遍历兄弟节点,再遍历子节点 算法:通过队列实现-->先进先出 广度优先遍历的结果: 50,20,60,15,30,70,12 程序遍历这个二叉树: # encoding=utf ...

  2. 图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)

    参考网址:图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS) - 51CTO.COM 深度优先遍历(Depth First Search, 简称 DFS) 与广度优先遍历(Breath ...

  3. C++ 二叉树深度优先遍历和广度优先遍历

    二叉树的创建代码==>C++ 创建和遍历二叉树 深度优先遍历:是沿着树的深度遍历树的节点,尽可能深的搜索树的分支. //深度优先遍历二叉树void depthFirstSearch(Tree r ...

  4. 05 (OC) 二叉树 深度优先遍历和广度优先遍历

    总结深度优先与广度优先的区别   1.区别 1) 二叉树的深度优先遍历的非递归的通用做法是采用栈,广度优先遍历的非递归的通用做法是采用队列. 2) 深度优先遍历:对每一个可能的分支路径深入到不能再深入 ...

  5. python实现二叉树的遍历以及基本操作

    主要内容: 二叉树遍历(先序.中序.后序.宽度优先遍历)的迭代实现和递归实现: 二叉树的深度,二叉树到叶子节点的所有路径: 首先,先定义二叉树类(python3),代码如下: class TreeNo ...

  6. C++版 - 剑指Offer 面试题39:二叉树的深度(高度)(二叉树深度优先遍历dfs的应用) 题解

    剑指Offer 面试题39:二叉树的深度(高度) 题目:输入一棵二叉树的根结点,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度.例如:输入二叉树 ...

  7. java算法----------二叉树的遍历

    二叉树的遍历分为前序.中序.后序和层序遍历四种方式 首先先定义一个二叉树的节点 //二叉树节点 public class BinaryTreeNode { private int data; priv ...

  8. 基于python实现二叉树的遍历

    """ 二叉树实践: 用递归构建树的遍历 # 思路分析 -- 1.使用链式存储,一个Node表示一个数的节点 -- 2.节点考虑使用两个属性变量,分别表示左连接右连接 & ...

  9. Python算法——二叉树

    一.二叉树 from collections import deque class BiTreeNode: def __init__(self, data): self.data = data sel ...

随机推荐

  1. springmvc 实现原理与struts2原理的区别

    spring mvc的入口是servlet,而struts2是filter,这样就导致了二者的机制不同. spring mvc是基于方法的设计,sturts2是基于类设计的. springmvc将ur ...

  2. 剑指tomcat之多项目部署问题

    部署项目时遇到的问题,tomcat的webapps文件夹中有两个war包,但每次启动Tomcat服务时,只会默认启动一个war包. 解决方案一:在Tomcat主页中进入应用管理页面,手动开启项目.(进 ...

  3. kafka基础二

    kafka生产者工作流程 消息产生分析 1.写入方式: producer采用推(push)模式将消息发布到broker,每条消息都会被追加(append)到分区Partition上,属于顺序写磁盘(顺 ...

  4. CentOS7下Oracle11gR2监听启动错误解决

    oracle监听程序启动失败,错误如下: [oracle@localhost ~]$ lsnrctl start LSNRCTL - Production on -APR- :: Copyright ...

  5. OpenCV中CvMat的初始化[转]

    一)cvCreateMat创建和分配数据CvCreateMat会创建CvMat,并为CvMat分配数据.cvCreateMat可以配合cvInitMatHeader来初始化CvMat对象.因为CvCr ...

  6. “chm 已取消到该网页的导航”解决方案

    1. 右键单击该 CHM 文件,然后单击“属性”. 2. 单击“取消阻止”或者“解除锁定”. 3. 双击此 .chm 文件以打开此文件.

  7. sqlite总结1

    I Shell下命令行程序CLP I .help II 命令的简写 .e = .quit .s .h = .help II 数据库管理 A 创建数据库 1 CREATE TABLE id_name(i ...

  8. php接口开发注意事项

    IOS Object c  强类型 Android java  强类型 wap javascript 弱类型 后台 php 弱类型 开发接口 wap和app共用 强类型语言可能要求返回的值是数组就要保 ...

  9. 国家气象局提供的天气预报接口(完整Json接口)

    国家气象局提供的天气预报接口主要有三个,分别是:http://www.weather.com.cn/data/sk/101010100.htmlhttp://www.weather.com.cn/da ...

  10. 浅谈倍增LCA

    题目链接:https://www.luogu.org/problemnew/show/P3379 刚学了LCA,写篇blog加强理解. LCA(Least Common Ancestors),即最近公 ...