基于Python的二叉树遍历算法
来源:互联网 发布:微信恶搞软件 编辑:程序博客网 时间:2024/06/07 05:46
今天用Python把二叉树的三种遍历都实现了一遍,用作学习Python的练手程序:
<span style="font-size:14px;">#/usr/bin/python#coding: utf-8from collections import deque#二叉树的节点结构class Node(): def __init__(self,data=None,left=None,right=None): self.data=data self.left=left self.right=rightdef create_tree(root): a=raw_input('please input a data:') if a=='#': root=None else: root=Node(data=a) print "请输入%s的左孩子:" % root.data root.left=create_tree(root.left) print "请输入%s的右孩子:" % root.data root.right=create_tree(root.right) return root#递归前序遍历def preorder(root): if root==None: return else: print root.data inorder(root.left) inorder(root.right)#非递归先序遍历def preorder_non(root): q=deque([]) q.append(root) while q: tem=q.pop() print tem.data if tem.right!= None: q.append(tem.right) if tem.left!= None: q.append(tem.left)#递归中序遍历def inorder(root): if root is None: return else: inorder(root.left) print root.data inorder(root.right)#非递归中序遍历def inorder_non(root): q=deque([]) q.append(root) while q: while root!=None and root.left!=None: q.append(root.left) root=root.left tem=q.pop() print tem.data if tem.right!=None: q.append(tem.right) root=tem.right#递归后序遍历def postorder(root): if root is None: return else: postorder(root.left) postorder(root.right) print root.data#非递归后序遍历def postorder_non(root): q1=deque([]) q2=deque([]) result=[] q1.append(root) while q1: tem=q1.pop() q2.append(tem) if tem.left!=None: q1.append(tem.left) if tem.right!=None: q1.append(tem.right) while q2: top=q2.pop() #print top.data result.append(top.data) print resultif __name__ =="__main__": root=None print "创建二叉栿" root=create_tree(root) print "递归先序遍历" preorder(root) print "非递归先序遍历" preorder_non(root) print "递归中序遍历" inorder(root) print "非递归中序遍历" inorder_non(root) print "递归后序遍历" postorder(root) print "非递归后序遍历" postorder_non(root)</span>
0 0
- 基于Python的二叉树遍历算法
- Python实现: 常用排序算法 & 二叉树的遍历算法
- 基于计数栈的非递归二叉树遍历算法
- 【Python排序搜索基本算法】之二叉树的遍历
- 二叉树的遍历算法
- 二叉树的遍历算法
- 二叉树的遍历算法
- 二叉树的遍历算法
- 二叉树的遍历算法
- 遍历二叉树的算法
- 二叉树遍历的算法
- 二叉树的遍历算法
- 二叉树的遍历算法
- [c++]基于数组的二叉树遍历
- 基于递归的二叉树遍历
- Python 遍历二叉树
- 二叉树遍历算法
- 二叉树遍历算法
- RDMSR--读MSR
- [AIZU1361] Deadlock Detection [2015 ACM-ICPC Asia Tsukuba Regional Contest F]
- 判断满二叉树中有不同子树的节点有多少个
- 九度OJ 1076 N的阶乘 (大整数运算)
- LeetCode 91 Decode Ways
- 基于Python的二叉树遍历算法
- HandlerThread解析
- LightOJ 1422 Halloween Costumes 区间DP
- Java 或 Android属性生成工具
- Bloom
- Java设计模式的六大原则
- springmvc 多数据源 SSM java redis
- 常见的sql查询语句
- 三角形输出