基于 Python 的数据结构与算法分析学习记录(6-7)—— 树的遍历

来源:互联网 发布:工业企业利润数据 编辑:程序博客网 时间:2024/05/20 07:35

前序 在前序遍历中,我们首先访问根节点,然后递归地做左侧子树的前序遍历,随后是右侧子树的递归前序遍历。

中序 在一个中序遍历中,我们递归地对左子树进行一次遍历,访问根节点,最后递归遍历右子树。

后序 在后序遍历中,我们递归地对左子树和右子树进行后序遍历,然后访问根节点。

编写树遍历的代码惊人地优雅,主要是因为遍历是递归写的。

# -*- coding:utf-8 -*-class BinaryTree(object):    def __init__(self, rootObj):        self.key = rootObj        self.leftChild = None        self.rightChild = None    def insertLeft(self, newNode):        if self.leftChild is None:            self.leftChild = BinaryTree(newNode)        else:            t = BinaryTree(newNode)            t.leftChild = self.leftChild            self.leftChild = t    def insertRight(self, newNode):        if self.rightChild is None:            self.rightChild = BinaryTree(newNode)        else:            t = BinaryTree(newNode)            t.rightChild = self.rightChild            self.rightChild = t    def getLeftChild(self):        return self.leftChild    def getRightChild(self):        return self.rightChild    def setRootVal(self, obj):        self.key = obj    def getRootVal(self):        return self.key# as an external functiondef preorder(tree):    if tree:        print(tree.getRootVal())        preorder(tree.getLeftChild())        preorder(tree.getRightChild())def postorder(tree):    if tree:        postorder(tree.getLeftChild())        postorder(tree.getRightChild())        print(tree.getRootVal())def inorder(tree):    if tree:        inorder(tree.getLeftChild())        print(tree.getRootVal())        inorder(tree.getRightChild())r = BinaryTree('a')r.insertLeft('b')r.getLeftChild().insertRight('d')r.insertRight('c')r.getRightChild().insertLeft('e')r.getRightChild().insertRight('f')print('先序遍历:')preorder(r)print('中序遍历:')inorder(r)print('后序遍历:')postorder(r)

这里写图片描述

这里写图片描述

0 0
原创粉丝点击