python实现二叉树的遍历
来源:互联网 发布:php addoption 编辑:程序博客网 时间:2024/05/22 00:34
python实现二叉树和它的七种遍历
先序:
1.访问根结点2.访问左子树3.访问右子树
中序:
1.访问左子树2.访问根结点3.访问右子树
后序:
1.访问左子树2.访问右子树3.访问根结点
#coding=utf-8class Node(object): """节点类""" def __init__(self, elem=-1, lchild=None, rchild=None): self.elem = elem self.lchild = lchild self.rchild = rchildclass Tree(object): """树类""" def __init__(self): self.root = Node() self.myQueue = [] def add(self, elem): """为树添加节点""" node = Node(elem) if self.root.elem == -1: # 如果树是空的,则对根节点赋值 self.root = node self.myQueue.append(self.root) else: treeNode = self.myQueue[0] # 此结点的子树还没有齐。 if treeNode.lchild == None: treeNode.lchild = node self.myQueue.append(treeNode.lchild) else: treeNode.rchild = node self.myQueue.append(treeNode.rchild) self.myQueue.pop(0) # 如果该结点存在右子树,将此结点丢弃。 def front_digui(self, root): """利用递归实现树的先序遍历""" if root == None: return print root.elem, self.front_digui(root.lchild) self.front_digui(root.rchild) def middle_digui(self, root): """利用递归实现树的中序遍历""" if root == None: return self.middle_digui(root.lchild) print root.elem, self.middle_digui(root.rchild) def later_digui(self, root): """利用递归实现树的后序遍历""" if root == None: return self.later_digui(root.lchild) self.later_digui(root.rchild) print root.elem, def front_stack(self, root): """利用堆栈实现树的先序遍历""" if root == None: return myStack = [] node = root while node or myStack: while node: #从根节点开始,一直找它的左子树 print node.elem, myStack.append(node) node = node.lchild node = myStack.pop() #while结束表示当前节点node为空,即前一个节点没有左子树了 node = node.rchild #开始查看它的右子树 def middle_stack(self, root): """利用堆栈实现树的中序遍历""" if root == None: return myStack = [] node = root while node or myStack: while node: #从根节点开始,一直找它的左子树 myStack.append(node) node = node.lchild node = myStack.pop() #while结束表示当前节点node为空,即前一个节点没有左子树了 print node.elem, node = node.rchild #开始查看它的右子树 def later_stack(self, root): """利用堆栈实现树的后序遍历""" if root == None: return myStack1 = [] myStack2 = [] node = root myStack1.append(node) while myStack1: #这个while循环的功能是找出后序遍历的逆序,存在myStack2里面 node = myStack1.pop() if node.lchild: myStack1.append(node.lchild) if node.rchild: myStack1.append(node.rchild) myStack2.append(node) while myStack2: #将myStack2中的元素出栈,即为后序遍历次序 print myStack2.pop().elem, def level_queue(self, root): """利用队列实现树的层次遍历""" if root == None: return myQueue = [] node = root myQueue.append(node) while myQueue: node = myQueue.pop(0) print node.elem, if node.lchild != None: myQueue.append(node.lchild) if node.rchild != None: myQueue.append(node.rchild)if __name__ == '__main__': """主函数""" elems = range(10) #生成十个数据作为树节点 tree = Tree() #新建一个树对象 for elem in elems: tree.add(elem) #逐个添加树的节点 print '队列实现层次遍历:' tree.level_queue(tree.root) print '\n\n递归实现先序遍历:' tree.front_digui(tree.root) print '\n递归实现中序遍历:' tree.middle_digui(tree.root) print '\n递归实现后序遍历:' tree.later_digui(tree.root) print '\n\n堆栈实现先序遍历:' tree.front_stack(tree.root) print '\n堆栈实现中序遍历:' tree.middle_stack(tree.root) print '\n堆栈实现后序遍历:' tree.later_stack(tree.root)
阅读全文
0 0
- 二叉树的遍历(python实现)
- 二叉树递归遍历的python实现
- 二叉树与遍历的Python实现
- python实现二叉树的遍历
- python实现二叉树的遍历
- python实现二叉树,以及二叉树的遍历
- python实现二叉树遍历
- python实现二叉树和它的七种遍历
- Python实现二叉树的递归和非递归遍历
- 二叉树的遍历以及重建(Python实现)
- Python实现: 常用排序算法 & 二叉树的遍历算法
- 「数据结构」二叉树的遍历以及Python实现
- python实现二叉树和它的七种遍历
- Python实现二叉树及遍历方法
- python实现二叉树以及二叉树的遍历--1(面向对象的方法实现)
- python实现二叉树以及二叉树的遍历--1(函数实现)
- 二叉树遍历的实现
- 二叉树的遍历实现
- 如何查看linux的命令执行路径
- 第十二周 Kruskal算法的验证
- 【JavaEE学习笔记】设计模式_单例模式
- html <span>标签的取值和赋值
- AngularJs异常:TypeError: v2.showAddGroupPanel is not a function
- python实现二叉树的遍历
- jquery之常用插件
- 向数据库添加100W 条数据 性能测试
- springboot学习(1)springboot介绍及入门例子
- 解决Fiddler不能抓取chrome浏览器的数据包问题
- JAVA 8 In Action 读书笔记 (五) : MultiThreads
- 选择排序java实现
- toLowerCase()把字符变为小写 ,toUpperCase()把字符变为大写
- java web常用注解