二叉树

组成:

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. SSAS中处理时经常出现的几种错误

    1.[重复属性键的错误]"处理时找到重复的属性键"   当在[属性关系]里指定属性关系后,   就出出现此错误,因为不知道Month值“1”,并不知道是属于哪一年的,   所以需要 ...

  2. sgu316Kalevich Strikes Back(线段树+扫描线)

    做法:总体想法是求出一个矩形的面积以及它所包含的矩形,然后用自己的面积减掉所包含的.主要问题是怎样求解它所包含的矩形. 因为是没有相交点的,可以利用扫描线的方法去做,类似染色,当前段如果是x色,也就是 ...

  3. 二叉查找树之AVL树

    定义平衡树节点: class TreeNode { /** * 树节点的值 */ private int val; /** * 树的高度 */ private int height; /** * 左子 ...

  4. split()分割字符串用法

    <script type="text/javascript"> var str="How are you doing today?" documen ...

  5. vue.js2.0实战填坑记录

    访https://github.com/bailicangdu/vue2-elm的PC商城 在创建的 router 对象中,如果不配置 mode,就会使用默认的 hash 模式,该模式下会将路径格式化 ...

  6. MFC双缓冲解决图象闪烁[转]

    转载网上找到的一篇双缓冲的文章,很好用.http://www.cnblogs.com/piggger/archive/2009/05/02/1447917.html__________________ ...

  7. bin&sbin 命令作用

    最近需要了解sbin与bin的功能,需要整理一下.一下全部为Ubuntu14里面默认安装的.在这里收集一下,转载请注明出处! bin bash shell bunzip2 .bz2文件的解压缩程序. ...

  8. Yii 2.0排序功能的使用

    在Yii2.0项目的实际开发中,经常会遇到使用Yii2.0自带的排序功能.下面是排序功能的具体使用方法. 一.设置排序规则 注意引入Sort类,如:use yii\data\Sort; // 设置排序 ...

  9. 非常实用的Linux 系统监控工具

    随着互联网行业的不断发展,各种监控工具多得不可胜数.这里列出网上最全的监控工具.让你可以拥有超过80种方式来管理你的机器.在本文中,我们主要包括以下方面: 命令行工具 网络相关内容 系统相关的监控工具 ...

  10. Linux系统里让vim支持markdown格式的语法高亮

    Markdown是深受程序员喜爱的一个文件格式. 然而Linux里默认的vim设置,并不支持markdown格式的语法高亮显示. 下面就来介绍如何设置使得markdown格式的文件在vim里也能享有语 ...