1. __author__ = "WSX"
  2.  
  3. class Node:
  4. def __init__(self, val = None, left = None, right = None):
  5. self.val = val
  6. self.left = left
  7. self.right = right
  8.  
  9. class tree:
  10. def __init__(self, L):
  11. self.val = L
  12.  
  13. def bulid(self,root, i): #将列表转化建立二叉树
  14. if i < len(self.val):
  15. root = Node(val = self.val[i])
  16. root.left = self.bulid(root.left, 2*i+1)
  17. root.right = self.bulid(root.right, 2*i+2)
  18. return root
  19. return root
  20.  
  21. def preTraverse(self, tree_):
  22. root = tree_
  23. if root:
  24. print(root.val)
  25. self.preTraverse(root.left)
  26. self.preTraverse(root.right)
  27.  
  28. def midTraverse(self, tree_):
  29. root = tree_
  30. if root:
  31. self.preTraverse(root.left)
  32. print(root.val)
  33. self.preTraverse(root.right)
  34.  
  35. def postTraverse(self, tree_):
  36. root = tree_
  37. if root:
  38. self.preTraverse(root.left)
  39. self.preTraverse(root.right)
  40. print(root.val)
  41.  
  42. def cengci(self, tree_):
  43. root = tree_
  44. queue = [root] #借助队列
  45. while root and len(queue)!= 0:
  46. print(queue[0].val) #visit
  47. if queue[0].left:
  48. queue.append(queue[0].left)
  49. if queue[0].right:
  50. queue.append(queue[0].right)
  51. queue.pop(0)
  52.  
  53. T = tree(['','','',"","",""])
  54. root = T.bulid(Node(), 0)
  55. print("preTraverse"); T.preTraverse(root)
  56. print("postTraverse");T.postTraverse(root)
  57. print("midTraverse");T.midTraverse(root)
  58. print("cengci");T.cengci(root)

非递归遍历:

  1. __author__ = "WSX"
  2.  
  3. def pre(root):
  4. if not root:
  5. return None
  6. stack = [root]
  7. res = []
  8. while stack:
  9. res.append(root.val)
  10. if root.right:
  11. stack.append(root.right)
  12. if root.left:
  13. stack.append(root.left)
  14. root = stack.pop()
  15. return res
  16.  
  17. def inOrderTraverse(node):
  18. stack = []
  19. pos = node
  20. while pos is not None or len(stack) > 0:
  21. if pos is not None:
  22. stack.append(pos)
  23. pos = pos.left
  24. else:
  25. pos = stack.pop()
  26. print(pos.val)
  27. pos = pos.right
  28.  
  29. def postOrderTraverse(node):
  30. stack = [node]
  31. stack2 = []
  32. while len(stack) > 0:
  33. node = stack.pop()
  34. stack2.append(node)
  35. if node.left is not None:
  36. stack.append(node.left)
  37. if node.right is not None:
  38. stack.append(node.right)
  39. while len(stack2) > 0:
  40. print(stack2.pop().val)

二叉树的遍历python 代码的更多相关文章

  1. 【数据结构】二叉树的遍历(前、中、后序及层次遍历)及leetcode107题python实现

    文章目录 二叉树及遍历 二叉树概念 二叉树的遍历及python实现 二叉树的遍历 python实现 leetcode107题python实现 题目描述 python实现 二叉树及遍历 二叉树概念 二叉 ...

  2. 【LeetCode】102. Binary Tree Level Order Traversal 二叉树的层序遍历 (Python&C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 BFS DFS 日期 题目地址:https://lee ...

  3. 二叉树及其遍历方法---python实现

    github:代码实现 本文算法均使用python3实现 1. 二叉树 1.1 二叉树的定义   二叉树是一种特殊的树,它具有以下特点:   (1)树中每个节点最多只能有两棵树,即每个节点的度最多为2 ...

  4. Python与数据结构[3] -> 树/Tree[0] -> 二叉树及遍历二叉树的 Python 实现

    二叉树 / Binary Tree 二叉树是树结构的一种,但二叉树的每一个节点都最多只能有两个子节点. Binary Tree: 00 |_____ | | 00 00 |__ |__ | | | | ...

  5. Python算法-二叉树深度优先遍历

    二叉树 组成: 1.根节点  BinaryTree:root 2.每一个节点,都有左子节点和右子节点(可以为空)  TreeNode:value.left.right 二叉树的遍历: 遍历二叉树:深度 ...

  6. python实现二叉树的遍历以及基本操作

    主要内容: 二叉树遍历(先序.中序.后序.宽度优先遍历)的迭代实现和递归实现: 二叉树的深度,二叉树到叶子节点的所有路径: 首先,先定义二叉树类(python3),代码如下: class TreeNo ...

  7. Python代码样例列表

    扫描左上角二维码,关注公众账号 数字货币量化投资,回复“1279”,获取以下600个Python经典例子源码 ├─algorithm│       Python用户推荐系统曼哈顿算法实现.py│    ...

  8. [DS+Algo] 010 二叉树的遍历

    二叉树遍历 深度优先 一般用递归 一些名词 遍历方式 英文 先序 Preorder 中序 Inorder 后序 Postorder 广度优先 一般用队列 Python 代码示例 class Node( ...

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

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

随机推荐

  1. 解剖Nginx·模块开发篇(2)ngx_http_hello_world_module 模块基本结构定义

    elloWorld 是一个典型的 location 模块.什么是 location 模块?在 Nginx 中,根据作用域,有 main 模块.server 模块.location 模块. 1 模块定义 ...

  2. java常用正则校验工具类

    正则常用校验工具类 import java.util.regex.Pattern; /** * @program: * @description: 校验工具类 * @author: xujingyan ...

  3. APP安全之代码混淆防止反编译查看真实的头文件函数声明

    现在有的公司对自己的爱屁屁(APP)安全上有重视,所以本篇讲一下代码混淆,即使别人反编译出来,也看不出来头文件的信息. 上菜: 1.首先安装class-dump,下载地址:http://steveny ...

  4. @property 修饰符

    原子性--- nonatomic 特质 在默认情况下,由编译器合成的方法会通过锁定机制确保其原子性(atomicity).如果属性具备 nonatomic 特质,则不使用同步锁.请注意,尽管没有名为“ ...

  5. 647. Palindromic Substrings 互文的子字符串

    [抄题]: Given a string, your task is to count how many palindromic substrings in this string. The subs ...

  6. 线上服务内存OOM问题定位

    转自:架构师之路,http://mp.weixin.qq.com/s/iOC1fiKDItn3QY5abWIelg 相信大家都有感触,线上服务内存OOM的问题,是最难定位的问题,不过归根结底,最常见的 ...

  7. easyui combogrid 多选加载,保存,显示代码

    1.调用代码 UTIL.SetDict($("#txt_ExcludeIndustry_"), "SECTOR_TYPE", true, true, funct ...

  8. redis集群部署及常用的操作命令(上)

    简单说下自己测试搭建简单的redis集群的大体步骤: 1.首先你的有6个redis(官方说最少6个,3master,3slave),可以先在一台机器上搭建,搭建到多台上应该只需要改变启动命令即可(可能 ...

  9. centos7设置、查看、删除环境变量的方法

    centos查看环境变量与设置环境变量在使用过程中很常见,本文整理了一些常用的与环境变量相关的命令,感兴趣的朋友可以参考下希望对你有所帮助 1. 显示环境变量HOME(红色部分代表要输入的命令,不要把 ...

  10. python nose的html报告优化

    用的是nose的nose-html-reporting (0.2.3)插件生成报告.用了bootstrap前端框架,加入了开始时间和计算持续时间,及其本地化. 优化后的显示效果: 代码地址