• 二叉树(python实现)


    二叉树的遍历和添加结点

    class Node():
        def __init__(self, item):
            self.elem = item
            self.l_child = None
            self.r_child = None
    
    class Tree():
        def __init__(self):
            self.root = None
    
        def add(self, elem):
            """为树添加节点"""
            node = Node(elem)
            # 如果树是空的,则对根节点赋值
            if self.root is None:
                self.root = node
                return
            else:
                queue = []
                queue.append(self.root)
                # 对已有节点进行层次遍历
                while queue:
                    # 弹出队列的第一个元素
                    cur = queue.pop(0)
                    if cur.l_child == None:
                        cur.l_child = node
                        return
                    elif cur.r_child == None:
                        cur.r_child = node
                        return
                    else:
                        # 如果左右子树都不为空,加入队列继续判断
                        queue.append(cur.l_child)
                        queue.append(cur.r_child)
    
        def preorder(self, root):
            if root == None:
                return
            print(root.elem, end='')
            self.preorder(root.lchild)
            self.preorder(root.rchild)
    
            def inorder(self, root):
                """递归实现中序遍历"""
                if root == None:
                    return
                self.inorder(root.lchild)
                print(root.elem, end=" ")
                self.inorder(root.rchild)
    
            def postorder(self, root):
                """递归实现后续遍历"""
                if root == None:
                    return
                self.postorder(root.lchild)
                self.postorder(root.rchild)
                print(root.elem, end=" ")
    
            # ××××××××××    广度优先遍历   ×××××××××
            # 从树的root开始,从上到下从从左到右遍历整个树的节点
            def breadth_travel(self):
                """利用队列实现树的层次遍历"""
                if self.root == None:
                    return
                queue = [self.root]
                while queue:
                    node = queue.pop(0)
                    print(node.elem, end=" ")
                    if node.lchild != None:
                        queue.append(node.lchild)
                    if node.rchild != None:
                        queue.append(node.rchild)
  • 相关阅读:
    C语言|作业07
    Cookie应用
    刷新页面,怎么做到不提示“不重新发送消息,则无法刷新页面”
    笔记
    笔记
    元素内部设定position
    企业微信正式发布 Tita 绩效宝,助力企业完成数字化绩效管理转型
    OKR实践:如何获得高层的理解与关注
    OKR:衡量结果和解决实际问题
    2022 年绩效评估,HR看这一篇就够了!
  • 原文地址:https://www.cnblogs.com/sometingintheway/p/11961464.html
Copyright © 2020-2023  润新知