二叉树

组成:

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. vue http请求 vue-resource使用方法

    1.安装vue-resource扩展: npm install vue-resource 2.在main.js中引入 import http from 'vue-resource' 3.使用方法 // ...

  2. kafka基础三

    消费者消费消息过程(一) 消费者组 消费者是以消费者组consumer group的方式进行消息消费的,一个消费者组是由一个或者多个消费者组成的,共同消费一个topic,在每个分区同一时间只能由消费者 ...

  3. Android adb命令,linux中各种命令

    常用的ADB命令 1. 显示系统中全部Android平台: android list targets 2. 显示系统中全部AVD(模拟器): android list avd 3. 创建AVD(模拟器 ...

  4. SqlServer表和excel数据批量复制方法

    SqlServer表和excel数据批量复制方法 一.SqlServer表数据复制到excel方法: 1.新建查询,用sql语句把表数据读出来 2.然后,选择数据,右键“复制”(如果需要表字段名称,则 ...

  5. COGS 615. 韩国明星

    [问题描述] 在LazyCat同学的影响下,Roby同学开始听韩国的音乐,并且越来越喜欢H.o.T,尤其喜欢安七炫和Tony,可是,爱学习爱思考的Roby同学想,如果以后喜欢的韩星越来越多怎么办呢?R ...

  6. 洛谷 P2347 砝码称重 != codevs 2144

    题目描述 设有1g.2g.3g.5g.10g.20g的砝码各若干枚(其总重<=1000), 输入输出格式 输入格式: 输入方式:a1 a2 a3 a4 a5 a6 (表示1g砝码有a1个,2g砝 ...

  7. atom 自定义快捷键

    'atom-text-editor': 'shift-alt-i':'core:move-up' 'shift-alt-space':'core:move-down' 'shift-alt-l':'c ...

  8. Qt+事件的接收和忽略

    事件的接收与忽略的示意图如下图: 依据前面的知识,事件是可以依据情况进行接收和忽略的,事件的传播是组件层次上面的,而不是依靠类继承机制.在一个特殊的情形下,我们必须使用accept()和ignore( ...

  9. 伪题解 洛谷 P1363 幻想迷宫(DFS)

    毒瘤题,做了一晚上抄题解A了 因为是抄题解,我也不好意思说什么了,就发篇博客纪念一下吧 #include<iostream> #include<cstring> #includ ...

  10. Broadcast BCM94322 用ubuntu修改ID

    1.按这个教程的6楼做的http://bbs.pcbeta.com/viewthread-1324168-1-1.html.注意我先下载 的是ubuntu9.05版本,做U盘启动进live 模式,43 ...