二叉树 —— 创建 + 先序、中序、后序遍历(递归+非递归)
2016-12-04 12:39
393 查看
创建如下二叉树:
View Code
#coding:utf-8 class Node(object): '''构造节点''' def __init__(self,data=None,lchild=None,rchild=None): self.data = data self.lchild = lchild self.rchild = rchild class Tree(object): def __init__(self): self.root = Node() def addNode(self,data): '''利用队列构造树''' node = Node(data) if self.root.data == None: self.root = node else: myqueue = [] treeNode = self.root myqueue.append(treeNode) while myqueue: treeNode = myqueue.pop(0) if treeNode.lchild == None: treeNode.lchild = node return elif treeNode.rchild == None: treeNode.rchild = node return else: myqueue.append(treeNode.lchild) myqueue.append(treeNode.rchild) def xianxu_digui(self,root): '''利用递归实现先序遍历''' if root == None: return root else: print(root.data,end=' ') self.xianxu_digui(root.lchild) self.xianxu_digui(root.rchild) def front_stack(self, root): """利用栈实现二叉树的先序遍历""" if root == None: return mystack = [] node = root while node or mystack: while node: # 从根节点开始,一直找它的左子树 print(node.data, end=' ') mystack.append(node) node = node.lchild node = mystack.pop() # node = node.rchild # def zhongxu_digui(self,root): '''利用递归实现中序遍历''' if root == None: return root else: self.zhongxu_digui(root.lchild) print(root.data,end=' ') self.zhongxu_digui(root.rchild) def midd_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() print(node.data, end=' ') node = node.rchild def houxu_digui(self,root): '''利用递归实现后序遍历''' if root == None: return else: self.houxu_digui(root.lchild) self.houxu_digui(root.rchild) print(root.data,end=' ') def later_stack(self, root): """利用栈实现后序遍历""" if root == None: return mystack1 = [] # mystack1 这是一个中介栈,目的是调整进mystack2 栈的顺序。 mystack2 = [] #该栈里面的元素是 逆序的倒序,逐个弹出,访问 node = root mystack1.append(node) while mystack1: node = mystack1.pop() mystack2.append(node) if node.lchild: mystack1.append(node.lchild) if node.rchild: mystack1.append(node.rchild) while mystack2: # 将mystack2中的元素逐个弹出,即为后序遍历次序 print(mystack2.pop().data,end=' ') def leve_queue(self,root): '''按层遍历''' if root == None: return else: myqueue = [] node = root myqueue.append(root) while myqueue: node = myqueue.pop(0) print(node.data,end=' ') if node.lchild: myqueue.append(node.lchild) if node.rchild: myqueue.append(node.rchild) tree = Tree() tree.addNode(1) tree.addNode(2) tree.addNode(3) tree.addNode(4) tree.addNode(5) tree.addNode(6) tree.addNode(7) tree.addNode(8) tree.addNode(9) tree.addNode(10) # print('先序遍历') tree.xianxu_digui(tree.root) print('\n') tree.front_stack(tree.root) print('\n') print('中序遍历 ') tree.zhongxu_digui(tree.root) print('\n') tree.midd_stack(tree.root) print('\n') print('后序遍历') tree.houxu_digui(tree.root) print('\n') tree.later_stack(tree.root) print('\n') print('层次遍历') tree.leve_queue(tree.root)
View Code
相关文章推荐
- 二叉树的创建和先序,中序,后序,递归,非递归遍历
- c++实现二叉树的非递归创建以及非递归先序、中序、后序遍历
- 二叉树的创建,先序、中序、后序遍历的递归实现以及层序遍历
- 用c语言创建一颗二叉树,用递归方法实现对其进行先序、中序和后序遍历的操作。
- 采用二叉链表结构实现二叉树,并以递归遍历思想实现二叉树的创建、二叉树的遍历(先序、中序、后序和层次遍历)
- 二叉树的递归创建以及前序,中序,后序遍历
- 非递归创建二叉树 先序 中序 后序遍历
- 二叉树(先序创建,递归先序,中序,后序遍历)-----1
- 递归创建二叉树,前序,中序,后序遍历二叉树,广义表创建二叉树,非递归前序,中序,后序遍历二叉树
- 二叉树的前中后层次遍历(递归+非递归)、创建树(数组、前序+中序、中序加后序)
- 二叉树的遍历;前序 中序 后序遍历二叉树;递归 非递归实现; 重建二叉树;编程之美重建二叉树
- 二叉树的创建及递归的先,中,后序遍历
- 非递归遍历二叉树的四种策略-先序、中序、后序和层序
- 二叉树先序、中序、后序遍历的非递归实现
- 我强大的二叉树(先序、层序创建,先序、中序、后序、层序遍历)
- 二叉树的前序、中序、后序遍历(非递归)
- 二叉树的创建以及利用迭代实现中序、先序、后序遍历、清空
- 非递归遍历二叉树的四种策略-先序、中序、后序和层序
- 二叉树先序、中序、后序遍历的非递归实现
- 二叉树的前序、中序、后序遍历与创建