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 ...
随机推荐
- Maven常见知识介绍
1)pom详解 2)pom详解 3)测试 4)插件与生命周期 5)maven生命周期 6)范围依赖
- 你不知道的HTTP之HTTPS
确保web安全的HTTPS HTTPS=HTTP+ 加密 + 认证 + 完整性保护 1.加密: 1)通信的加密 所谓互联网,是由能连通到全世界的网络组成的.无论世界哪个角 落的服务器在和客户端通信时, ...
- vijos 1034 家族(水题日常)
描述 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系. 规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚.如果x,y是亲戚 ...
- LinuxShell(脚本如何编译问题)
想学shell的同学请记住: 如果你写好脚本后不给脚本执行权限那也是不行的: 添加执行权限: chmod +x 脚本名.sh 在Linux shell中有一个脚本编译命令: bash -v 脚本名.s ...
- 理想路径——双向BFS
题目 给n个点m条边(2 ≤ n ≤ 100000,1 ≤ m ≤ 200000)的无向图,每条边上都涂有一种颜色.求从结点1到结点n的一条路径,使得经过的边数尽量的少,在此前提下,经过边的颜色序列的 ...
- 基于KMeans的指数择时策略
[导语]:聚类分析是指将物理或者抽象对象的结合分组为由类似对象组成的多个类的分析过程.简单来讲,聚类就是通过一些特征去自动识别一个大群体中的多个子群体,这些子群体中的对象彼此之间相似度高,而子群体之间 ...
- OpenCascade:屏闪问题。
1.在OnDraw中同时调用用V3d_View::Redaw()和 V3d_View::FitAll();可暂时解决. 2.在OnDraw中同时调用用V3d_View::Update();
- plsql循环的简单实例
declare v_id tbl_regions.regions_id%type; begin .. loop select t.regions_id into v_id from tbl_regio ...
- rocketmq 命令示例
http://www.360doc.com/content/16/0111/17/1073512_527143896.shtml http://www.cnblogs.com/marcotan/p/4 ...
- 开源 java 电商系统
shop++是基于spring.springmvc等主流框架开发,参考资料比较全面,上手容易: 比 javashop 代码可读性好. 适合二次开发 6.broadleaf基于spring.Spring ...