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

概念理解

对于二叉树,树的遍历有三种:先序遍历,中序遍历,后序遍历。

先序遍历:根节点->左孩子->右孩子

中序遍历:左孩子->根节点->右孩子

后序遍历:左孩子->右孩子->根节点


                                                    图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)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值