您的位置:首页 > 编程语言

树的前序,中序,后序遍历概念理解与代码实现

2018-03-22 15:42 134 查看
概念理解
对于二叉树,树的遍历有三种:先序遍历,中序遍历,后序遍历。
先序遍历:根节点->左孩子->右孩子
中序遍历:左孩子->根节点->右孩子
后序遍历:左孩子->右孩子->根节点



                                                    图1 树图
按照上述遍历概念知:
先序遍历:- + a * b - c d / e f
中序遍历:a + b * c - d - e / f
后序遍历:a b c d - * + e f / -
python代码实现#构造二叉树节点
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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐