iT邦幫忙

2022 iThome 鐵人賽

DAY 27
0
Software Development

闖進Python異世界系列 第 27

[Day 27] 闖進Python異世界 - Level Order Traversal of BST

  • 分享至 

  • xImage
  •  

這種遍歷法就比較好去想像,我們是一層一層的去印出節點內容

舉例來說,有一棵樹長這樣:

    _1_
 _3_    _7_
9   8  4   2

那經過 level order 得出的結果就是 1 3 7 9 8 4 2

今天的目標就是去完成 Hackerrank 上的 Level Order Traversal


這個演算法最大的難處是,我們怎麼保存每個節點的子節點?
從圖上可以看到,要輸出的下一個節點是在父節點的另一顆子樹,或是更遙遠。總不能每次都從根節點出發吧?
這題我們搭配的資料結構是佇列(Queue)!

def levelOrder(root):
    if root is None:
        return None
    print(root.info, end = "")
    queue = []
    # 由於輸出格式,根節點需要另外處理
    if root.left != None:
        queue.append(root.left)
    if root.right != None:
        queue.append(root.right)
    # 處理其他節點
    while len(queue) != 0:
        size = len(queue)
        for i in range(size):
            print("", queue[0].info, end = "")
            if queue[0].left != None:
                queue.append(queue[0].left)
            if queue[0].right != None:
                queue.append(queue[0].right)
            queue.pop(0)

上一篇
[Day 26] 闖進Python異世界 - Traversal of BST
下一篇
[Day 28] 闖進Python異世界 - Valid BST
系列文
闖進Python異世界30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言