python数据结构——层次遍历的两种方法
来源:互联网 发布:php printr 带格式化 编辑:程序博客网 时间:2024/05/27 19:27
preface:主要是最近用层次遍历比较多,先中后序的遍历都有递归与非递归的方式,也比较容易明白,但层次不是很熟悉,自己不是很擅长,故记录下来。
递归与非递归
class TreeNode(object): def __init__(self, x): self.val = x self.left = None self.right = Noneclass Solution(object): def level_1(self, root): '''递归层次打印,根节点作为第0层,之后层次依次增加,''' def print_at_level(root, level,result): if not root or level<0: return 0 if level==0: result.append(root.val) print root.val return 1 return print_at_level(root.left, level-1, result)+print_at_level(root.right, level-1, result) i = 0 results = [] while True: result = [] print "level i:",i if not print_at_level(root,i, result):#将每层的结果放到results列表中, break i+=1 results+=result,#将每层的结果追加到results中 print results def level_2(self, root): '''设置双指针,一个指向访问当前开始的节点,一个指向访问当层结束节点的下一个位置''' vec = list() vec.append(root) cur = 0 end = 1 results = [] while cur < len(vec): end = len(vec) result = [] while cur < end: print vec[cur].val result.append(vec[cur].val) if vec[cur].left: vec.append(vec[cur].left) if vec[cur].right: vec.append(vec[cur].right) cur+=1 print "cur",cur results+=result, print resultsa1 = TreeNode(1)a2 = TreeNode(2)a3 = TreeNode(3)a4 = TreeNode(4)a5 = TreeNode(5)a6 = TreeNode(6)a7 = TreeNode(7)a8 = TreeNode(8)a1.left = a2a1.right = a3a2.left = a4a2.right = a5a5.left = a7a5.right = a8a3.right = a6a = Solution()a.level_1(a1)a.level_2(a1)
参考:http://blog.csdn.net/zzran/article/details/8778021
0 0
- python数据结构——层次遍历的两种方法
- 二叉树层次遍历的两种方法
- python遍历数组的两种方法
- python遍历数组的两种方法
- 数据结构Map—java描述(2)—HashMap的两种遍历方法
- 数据结构——二叉树的层次遍历
- 数据结构例程——二叉树的层次遍历算法
- 数据结构 — 5.二叉树层次遍历
- 数据结构—二叉树层次遍历
- 二叉树的高度 java 利用递归和层次遍历两种方法
- 二叉树的高度 java 利用递归和层次遍历两种方法
- python遍历文件夹——两种遍历本地文件记录文件夹个数、文件数及文件大小的方法
- python——二叉树的层次遍历
- python ── 遍历dict的两种方法比较
- Python遍历目录文件的两种方法
- Python遍历文件夹的两种方法比较
- Python遍历文件夹的两种方法比较
- python两种遍历字典(dict)的方法比较
- Mac 可设置环境变量的位置、查看和添加PATH环境变量
- ElasticSearch Bulk 源码解析
- Linux下利用backtrace追踪函数调用堆栈以及定位段错误
- 3D Touch
- Oracle内使用游标实现分页
- python数据结构——层次遍历的两种方法
- POJ2308 Dearboy's Puzzle(DFS+BFS)
- CSS 同时具备两个class的样式
- Android ListView工作原理完全解析,带你从源码的角度彻底理解
- iOS 8 中 Extension 和 Containing App 之间的数据共享
- Python中排序常用到的sort 、sorted和argsort函数
- poj-2632-Crashing Robots
- Java中的数组
- 红糖水白糖水切换vb