python-二叉樹:前、中、後、層序遍歷

Geekrun發表於2019-02-16

概要

本文只實現了二叉樹基本的幾種遍歷,增、刪、改、查,預計明天寫完,後面的功能也儘量完善

定義Node資料結構

class Node(object):
    def __init__(self, data):
        self.data = data
        self.lft = None #左節點
        self.rgt = None #右節點

先序遍歷

class BTree(object):
    def __init__(self):
        self._root = None
        self._size = 0

    def preOrder(self):
        ```
        先遍歷順序:
        1,根節點
        2,遍歷左子樹
        3,遍歷右子樹
        ```
        btree = []
        
        def recurse(node):
            if node != None:
                btree.append(node.data)
                recurse(node.lft)
                recurse(node.rgt)
        
        recurse(self._root)
        return btree

中序遍歷

class BTree(object):
    def __init__(self):
        self._root = None
        self._size = 0
    
    # 中序遍歷
    def inOrder(self):
        ```
        中序遍歷順序:
        1,遍歷左子樹
        2,根節點
        3,遍歷右子樹
        ```
        btree = []
        
        def recurse(node):
            if node != None:
                recurse(node.lft)
                btree.append(node.data)
                recurse(node.rgt)
        
        recurse(self._root)
        return btree

後序遍歷

class BTree(object):
    def __init__(self):
        self._root = None
        self._size = 0
    
    # 後序遍歷
    def postOrder(self):
        ```
        後序遍歷順序:
        1,遍歷左子樹
        2,遍歷右子樹
        3,根節點
        ```
        btree = []
        
        def recurse(node):
            if node != None:
                recurse(node.lft)
                recurse(node.rgt)
                btree.append(node.data)
        
        recurse(self._root)
        return btree

層序遍歷

from  collections import deque


class BTree(object):
    def __init__(self):
        self._root = None
        self._size = 0
    
    # 層序遍歷
    def leverOrder(self):
        q = deque()
        q.append(self._root)
        btree = []
        while q:
            #dque是一個雙向佇列,先進先出是popleft
            node = q.popleft()
            btree.append(node.data)
            if node.lft:
                q.append(node.lft)
            if node.rgt:
                q.append(node.rgt)
        return btree

引用

github 原始碼Btree原始碼

相關文章