二叉树的实现及其遍历(Python)

树是一种基本的“非线性”数据结构
数据结构树分为:根、枝和叶三个部分

  • 节点Node:是组成树的基本部分,每个节点具有名称或“键值”

  • 边Edge:边是组成树的另一个基本部分

  • 根Root:树中唯一一个没有入边的节点

  • 路径Path:由边依次连接在一起的节点的有序列表

  • 层级Level:从根节点开始到达一个节点的路径,包含的边的数量称为这个节点的层级

  • 高度:树中所有节点的最大层级称为树的高度

若树的每个节点最多只能有两个子节点,则该树称为二叉树。二叉树的遍历方式有三种,可通过迭代和循环的方式实现:

  • 前序遍历(先访问根节点,再访问左子节点,最后访问右子节点)
  • 中序遍历(先访问左子节点,再访问根节点,最后访问右子节点)
  • 后序遍历(先访问左子节点,再访问右子节点,最后访问根节点)

python BinaryTree类的实现(包括前中后序遍历以及树的高度)

class BinaryTree:
    def __init__(self, rootObj):
        self.key = rootObj
        self.leftChild = None
        self.rightChild = None

    def insertLeft(self, newNode):
        if not self.leftChild:
            self.leftChild = BinaryTree(newNode)
        else:
            t = BinaryTree(newNode)
            t.left = self.leftChild
            self.leftChild = t

    def insertRight(self, newNode):
        if not self.rightChild:
            self.rightChild = BinaryTree(newNode)
        else:
            t = BinaryTree(newNode)
            t.right = self.rightChild
            self.rightChild = t

    def isLeaf(self):
        return (not self.leftChild) and (not self.rightChild)

    def getLiftChild(self):
        return self.leftChild

    def getRightChild(self):
        return self.rightChild

    def setRootVal(self,obj):
        self.key = obj

    def getRootVal(self):
        return self.key

    def inorder(self):
        if self.leftChild:
            self.leftChild.inorder()
        print(self.key)
        if self.rightChild:
            self.rightChild.inorder()

    def postorder(self):
        if self.leftChild:
            self.rightChild.postorder()
        if self.rightChild:
            self.rightChild.postorder()
        print(self.key)

    def preorder(self):
        print(self.key)
        if self.leftChild:
            self.leftChild.preorder()
        if self.rightChild:
            self.rightChild.preorder()


def height(tree):
    if tree is None:
        return -1
    else:
        return 1 + max(height(tree.leftChild),height(tree.rightChild))

测试用例

t = BinaryTree(7)
t.insertLeft(3)
l = t.getLiftChild()
l.insertLeft(3)
t.insertRight(9)
t.inorder()
print(height(t))

输出

3
3
7
9
2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值