转载同情驴的博客园
# -*- coding: utf-8 -*-
class BinaryTreeNode(object):
def __init__(self,data=None,left=None,right=None):
self.data=data
self.left=left
self.right=right
class BinaryTree(object):
def __init__(self,root=None):
self.root=root
def is_empty(self):
return self.root==None
def preOrder(self,BinaryTreeNode):
if BinaryTreeNode==None:
return
print BinaryTreeNode.data
self.preOrder(BinaryTreeNode.left)
self.preOrder(BinaryTreeNode.right)
def inOrder(self, BinaryTreeNode):
if BinaryTreeNode == None:
return
# 先打印左结点,再打印根结点,后打印右结点
self.inOrder(BinaryTreeNode.left)
print(BinaryTreeNode.data)
self.inOrder(BinaryTreeNode.right)
def postOrder(self,BinaryTreeNode):
if BinaryTreeNode == None:
return
# 先打印左结点,再打印右结点,后打印根结点
self.postOrder(BinaryTreeNode.left)
self.postOrder(BinaryTreeNode.right)
print(BinaryTreeNode.data)
n1 = BinaryTreeNode(data="D")
n2 = BinaryTreeNode(data="E")
n3 = BinaryTreeNode(data="F")
n4 = BinaryTreeNode(data="B", left=n1, right=n2)
n5 = BinaryTreeNode(data="C", left=n3, right=None)
root = BinaryTreeNode(data="A", left=n4, right=n5)
bt = BinaryTree(root)
print'先序遍历'
bt.preOrder(bt.root)
print'中序遍历'
bt.inOrder(bt.root)
print'后序遍历'
bt.postOrder(bt.root)
print BinaryTreeNode.data
self.preOrder(BinaryTreeNode.left)
self.preOrder(BinaryTreeNode.right)
代码其实很短,但是写的非常的精妙。最难以理解的地方无非是这里,先中后遍历的函数。其实如果用递归调用的思维来看这块代码就简单多了,首先说如果再一个class中,调用self.fun相当于自己调用自己的函数。也就是说这一段代码线打印节点,然后不断的运行自己函数的左边,等到已经到底,左节点为空那么返回调用右边的函数知道右边为空。其他部分依此类推。