咀嚼一下别人写的二叉树遍历

转载同情驴的博客园
# -*- 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相当于自己调用自己的函数。也就是说这一段代码线打印节点,然后不断的运行自己函数的左边,等到已经到底,左节点为空那么返回调用右边的函数知道右边为空。其他部分依此类推。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值