zoukankan      html  css  js  c++  java
  • 数据结构_二叉树

    二叉树的创建
    class Node(object):
        """节点类"""
        def __init__(self, elem=-1, lchild=None, rchild=None):
            self.elem = elem
            self.lchild = lchild
            self.rchild = rchild
    
    class Tree(object):
        """树类"""
        def __init__(self, root=None):
            self.root = root
    
        def add(self, elem):
            """为树添加节点"""
            node = Node(elem)
            #如果树是空的,则对根节点赋值
            if self.root == None:
                self.root = node
            else:
                queue = []
                queue.append(self.root)
                #对已有的节点进行层次遍历
                while queue:
                    #弹出队列的第一个元素
                    cur = queue.pop(0)
                    if cur.lchild == None:
                        cur.lchild = node
                        return
                    elif cur.rchild == None:
                        cur.rchild = node
                        return
                    else:
                        #如果左右子树都不为空,加入队列继续判断
                        queue.append(cur.lchild)
                        queue.append(cur.rchild)

    二叉树的层次遍历
    def breadth_travel(self, root):
        """利用队列实现树的层次遍历"""
        if root == None:
            return
        queue = []
        queue.append(root)
        while queue:
            node = queue.pop(0)
            print(node.elem,)
            if node.lchild != None:
                queue.append(node.lchild)
            if node.rchild != None:
                queue.append(node.rchild)

    二叉树的深度遍历
    def preorder(self, root):
        """递归实现先序遍历"""
        if root == None:
            return
        print(root.elem)
        self.preorder(root.lchild)
        self.preorder(root.rchild)
    
    
    def inorder(self, root):
        """递归实现中序遍历"""
        if root == None:
            return
        self.inorder(root.lchild)
        print(root.elem)
        self.inorder(root.rchild)
    
    
    def postorder(self, root):
        """递归实现后序遍历"""
        if root == None:
            return
        self.postorder(root.lchild)
        self.postorder(root.rchild)
        print(root.elem)

    2020-05-07

  • 相关阅读:
    linux向下向上查找
    安卓中的线程
    安卓 新浪微博随便看看
    平面图的基本概念及性质
    软件工程知识点总结
    磁盘阵列RAID原理、种类及性能优缺点对比
    面试题之------三次握手与四次挥手过程
    不忘初心
    考研彼岸,花开馨香
    In和Out指令
  • 原文地址:https://www.cnblogs.com/hany-postq473111315/p/12845365.html
Copyright © 2011-2022 走看看