二叉樹(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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM