二叉树最新整理(前序中序后序,节点,最大深度)python版

	最近抽空又温习了二叉树的知识,并结合网上其他大牛整理了对应python版的实现方法。整理出来,方便以后使用。
"""
@Time     :   2020/12/4 10:15
@Author   :   Winter
@File     :   Binary_tree.py
@Software :   PyCharm
@Blog     :   https://blog.csdn.net/hdd871532887
"""
# coding=utf-8


class NodeTree:
    def __init__(self,  data=None,  lchild=None,  rchild=None):
        """

        :param data:    节点数据
        :param lchild:  左子树
        :param rchild:  右子树
        """
        self.data = data
        self.lchild = lchild
        self.rchild = rchild


class BinTree:
    #   ------前序遍历------(根左右node,lchild,rchild)
    #   递归算法
    def pre_order(self, t):
        # 判断二叉树为空
        if t == None:
            return 0
        print(t.data,   end=' ')
        self.pre_order(t.lchild)
        self.pre_order(t.rchild)

    #   ------中序遍历------(左根右lchild,node,rchild)
    #   递归算法
    def middle_order(self, t):
        # 判断二叉树为空
        if t == None :
            return 0
        self.middle_order(t.lchild)
        print(t.data, end=' ')
        self.middle_order(t.rchild)

    #   ------后序遍历------(左右根lchild,rchild,node)
    #   递归算法
    def post_order(self, t):
        # 判断二叉树为空
        if t == None:
            return 0
        self.post_order(t.lchild)
        self.post_order(t.rchild)
        print(t.data, end=' ')

    def depth(self, t):
        # 判断二叉树为空
        if t == None:
            return 0
        else:
            m = self.depth(t.lchild)
            n = self.depth(t.rchild)
            # 返回max(左子树,右子树)深度+1(根节点)
            return m+1 if m > n else n+1

    def nodecount(self, t):
        # 判断二叉树为空
        if t == None:
            return 0
        else:
            return self.nodecount(t.lchild)+self.nodecount(t.rchild)+1


if __name__ == '__main__':
    nodeTree = NodeTree(1,
                        lchild=NodeTree(2,
                                        lchild=NodeTree(4,  rchild=NodeTree(7))),
                        rchild=NodeTree(3,
                                        lchild=NodeTree(5), rchild=NodeTree(6)))
    T = BinTree()
    print("二叉树前序遍历结果为:")
    T.pre_order(nodeTree)
    print('\n')
    print("二叉树中序遍历结果为:")
    T.middle_order(nodeTree)
    print('\n')
    print("二叉树后序遍历结果为:")
    T.post_order(nodeTree)
    print('\n')
    print("此二叉树的深度为:")
    print(T.depth(nodeTree))
    print("此二叉树的节点个数为:")
    print(T.nodecount(nodeTree))

其中二叉树结构如下:
在这里插入图片描述
运行结果:
在这里插入图片描述

参考文章:https://www.cnblogs.com/chenzhen0530/p/10712793.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值