zoukankan      html  css  js  c++  java
  • 二叉树的功能实现

    # 树的单个结点
    class Node:
        def __init__(self,elem):
            # 结点数据
            self.elem = elem
            # 左子树和右子树
            self.lchild = None
            self.rchild = None
    
    # 二叉树的实现
    class my_tree:
        # 初始化空树
        def __init__(self):
            self.root = None
        # 树添加元素,广度遍历 + 队列
        def add(self,item):
            # 创建新结点
            node = Node(item)
            # 特殊情况
            if self.root is None:
                self.root = node
                return
            else:
                # 队列的方式实现,队列最开始存根
                queue = [self.root]
                # 循环处理队列,直到将新结点添加进树为止
                while queue:
                    # 取出第一个未处理的结点
                    cur_node = queue.pop(0)
                    # 判断取出的结点有没有左或右
                    # 左结点是空,则添加新结点
                    if cur_node.lchild is None:
                        cur_node.lchild = node
                        return
                    else:
                        # 左结点不是空,则将左结点添加进队列
                        queue.append(cur_node.lchild)
                    if cur_node.rchild is None:
                        cur_node.rchild = node
                        return
                    else:
                        queue.append((cur_node.rchild))
    # 广度遍历
    # 广度遍历
    def tree_travle(self):
        if self.root is None:
            return
        else:
            # 队列先存根结点
            queue = [self.root]
            while queue:
                # 取第一个未处理的结点
                cur_node = queue.pop(0)
                print(cur_node.elem, end=' ')
                if cur_node.lchild is not None:
                    queue.append(cur_node.lchild)
                if cur_node.rchild is not None:
                    queue.append(cur_node.rchild)
    # 深度遍历
        # 深度遍历
        # 先序 根左右
        def xian(self, root):
            if root == None:
                return
            else:
                print(root.elem, end=' ')
                # 递归
                self.xian(root.lchild)
                self.xian(root.rchild)
        # 中序 左根右
        def zhong(self,root):
            if root == None:
                return
            else:
                self.zhong(root.lchild)
                print(root.elem,end=' ')
                self.zhong(root.rchild)
        # 后序 左右根
        def hou(self,root):
            if root == None:
                return
            else:
                self.hou(root.lchild)
                self.hou(root.rchild)
                print(root.elem,end=' ')
    
    if __name__ == '__main__':
        tree = my_tree()
        tree.add(0)
        tree.add(1)
        tree.add(2)
        tree.add(3)
        tree.add(4)
        tree.add(5)
        tree.add(6)
        tree.add(7)
        tree.add(8)
        tree.add(9)
        # 广度
        tree.tree_travle()
        print('')
        # 先序
        tree.xian(tree.root)
        print('')
        # 中序
        tree.zhong(tree.root)
        print('')
        # 后序
        tree.hou(tree.root)
  • 相关阅读:
    Python 编码格式的使用
    解决cmd 运行python socket怎么终止运行
    解决win10子系统Ubuntu新装的mysql 不能root登陆方法
    浏览器中网址访问过程详解
    POJ 2502 最短路
    HDU 2859
    POJ 3186
    POJ 1661 暴力dp
    POJ 1015 陪审团问题
    CodeForces 1058E
  • 原文地址:https://www.cnblogs.com/hude/p/12950468.html
Copyright © 2011-2022 走看看