二叉树遍历

深度优先

  • 一般用递归
  • 一些名词
遍历方式 英文
先序 Preorder
中序 Inorder
后序 Postorder

广度优先

  • 一般用队列

Python 代码示例

  1. class Node(object):
  2. def __init__(self, elem=-1, lchild=None, rchild=None):
  3. self.elem = elem
  4. self.lchild = lchild
  5. self.rchild = rchild
  6. class Tree(object):
  7. def __init__(self, root=None):
  8. self.root = root
  9. def add(self, elem):
  10. """ 走的是“完全二叉树的路” """
  11. node = Node(elem)
  12. if self.root is None:
  13. self.root = node
  14. else:
  15. queue = []
  16. queue.append(self.root)
  17. while queue:
  18. cur = queue.pop(0)
  19. if cur.lchild is None:
  20. cur.lchild = node
  21. return
  22. elif cur.rchild is None:
  23. cur.rchild = node
  24. return
  25. else:
  26. queue.append(cur.lchild)
  27. queue.append(cur.rchild)
  28. def preorder(self, root):
  29. if root is None:
  30. return
  31. print(root.elem, end=' ')
  32. self.preorder(root.lchild)
  33. self.preorder(root.rchild)
  34. def inorder(self, root):
  35. if root is None:
  36. return
  37. self.inorder(root.lchild)
  38. print(root.elem, end=' ')
  39. self.inorder(root.rchild)
  40. def postorder(self, root):
  41. if root is None:
  42. return
  43. self.postorder(root.lchild)
  44. self.postorder(root.rchild)
  45. print(root.elem, end=' ')
  46. def breath_traverse(self, root):
  47. if root is None:
  48. return
  49. queue = []
  50. queue.append(root)
  51. while queue:
  52. node = queue.pop(0)
  53. print(node.elem, end=' ')
  54. if node.lchild:
  55. queue.append(node.lchild)
  56. if node.rchild:
  57. queue.append(node.rchild)
  58. print()
  59. if __name__ == "__main__":
  60. tree = Tree()
  61. for i in range(10):
  62. tree.add(i)
  63. tree.preorder(tree.root)
  64. print()
  65. tree.inorder(tree.root)
  66. print()
  67. tree.postorder(tree.root)
  68. print()
  69. tree.breath_traverse(tree.root)

[DS+Algo] 010 二叉树的遍历的更多相关文章

  1. 二叉树的遍历(递归,迭代,Morris遍历)

    二叉树的三种遍历方法: 先序,中序,后序,这三种遍历方式每一个都可以用递归,迭代,Morris三种形式实现,其中Morris效率最高,空间复杂度为O(1). 主要参考博客: 二叉树的遍历(递归,迭代, ...

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

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

  3. 二叉树的遍历(递归,迭代,Morris遍历)

    二叉树的遍历: 先序,中序,后序: 二叉树的遍历有三种常见的方法, 最简单的实现就是递归调用, 另外就是飞递归的迭代调用, 最后还有O(1)空间的morris遍历: 二叉树的结构定义: struct ...

  4. [Leetcode] Binary tree level order traversal二叉树层次遍历

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

  5. 算法与数据结构(三) 二叉树的遍历及其线索化(Swift版)

    前面两篇博客介绍了线性表的顺序存储与链式存储以及对应的操作,并且还聊了栈与队列的相关内容.本篇博客我们就继续聊数据结构的相关东西,并且所涉及的相关Demo依然使用面向对象语言Swift来表示.本篇博客 ...

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

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

  7. python3实现二叉树的遍历与递归算法解析

    1.二叉树的三种遍历方式 二叉树有三种遍历方式:先序遍历,中序遍历,后续遍历  即:先中后指的是访问根节点的顺序   eg:先序 根左右   中序 左根右  后序  左右根 遍历总体思路:将树分成最小 ...

  8. 二叉树的遍历--C#程序举例二叉树的遍历

    二叉树的遍历--C#程序举例二叉树的遍历 关于二叉树的介绍笨男孩前面写过一篇博客 二叉树的简单介绍以及二叉树的存储结构 遍历方案 二叉树的遍历分为以下三种: 先序遍历:遍历顺序规则为[根左右] 中序遍 ...

  9. 数据结构与算法之PHP实现二叉树的遍历

    一.二叉树的遍历 以某种特定顺序访问树中所有的节点称为树的遍历,遍历二叉树可分深度优先遍历和广度优先遍历. 深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次.可以细分 ...

随机推荐

  1. ZROI 19.08.05模拟赛

    传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. A \(21pts:\) 随便枚举,随便爆搜就好了. \(65pts:\) 比较显然的dp,设\(f_{i,j,k}\)表示在子树\( ...

  2. TypeScript作为前端开发你必须学习的技能二)

    TypeScript 变量声明 变量是一种使用方便的占位符,用于引用计算机内存地址.我们可以把变量看做存储数据的容器. TypeScript 变量的命名规则:和javascript一样.除了下划线 _ ...

  3. ubuntu1604-Python35-cuda9-cudnn7-gpu-dockerfile

    一,在某目录下有如下文件: -rw-r--r-- 1 root root 1643293725 9月 2 11:46 cuda_9.0.176_384.81_linux.run -rw-r--r-- ...

  4. matlab画二维直方图以及双y轴坐标如何修改另一边y轴的颜色

    1.首先讲一下如何用hist画二维直方图 x=[- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ...

  5. JPA学习(二、JPA_基本注解)

    框架学习之JPA(二) JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中 ...

  6. 使用 nodejs 和 axios 以及 cherrio 爬取天气预报

    安装依赖 引入依赖 发送请求 解析请求的返回值 以下代码可以复制直接运行,获得 7 天的天气预报 const axios = require('axios') const cheerio = requ ...

  7. formData和input的file结合使用

    <form method="POST" id="uploadForm" enctype="multipart/form-data"&g ...

  8. [LeetCode]-011-Roman_to_Integer

    Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 t ...

  9. Java字符串的不可变性

    声明一个字符串引用变量: String  s = "abcd"; s是一个引用变量,指向 堆内存中的字符串常量 "abcd" 再声明一个字符串引用变量: Str ...

  10. (知识)width、naturalWidth、clientWidth、offsetWidth区别整理

    今天在做图片裁剪功能的时候,参考了下网友的资料,发现大家对图片宽度的获取方式不尽相同,于是详细整理下各个属性的区别(详细请参考MDN). 1,HTMLImageElement.width是一个unsi ...