广度优先遍历算法-03树的右侧问题
生活随笔
收集整理的這篇文章主要介紹了
广度优先遍历算法-03树的右侧问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
樹的右側
- 簡介
- 一個有點變形的二叉樹的層序遍歷。
- 問題描述
- 現在有一個果樹,該樹果子節點符合二叉樹的分布,小王按照規定只能摘到從樹的右側看過去看到的第一個節點,求出節點序列。
- 問題分析
- 舉例如下
- 假定樹形如上,小王得到的結果為1,3,5,7。
- 其實,這不過是一個層序遍歷,求出每一層最后的那個結果而已。
- 算法流程
- 初始化隊列,將根節點入隊,當前第一層。
- 遍歷隊列的每個節點,記錄此時隊列長度,此時這些節點為同一層的,將節點的孩子入隊。若節點為長度位置,將其加入結果集。
- 輸出結果。
- 舉例如下
- 代碼
- # -*-coding:utf-8-*-class Node(object):def __init__(self, x):self.val = xself.left = Noneself.right = Nonedef __str__(self):return str(self.val)def solve(root):res = []queue = []queue.append(root)while len(queue) > 0:# 記錄每一層節點數目length = len(queue)for i in range(length):node = queue[0]del queue[0]if i == length-1:res.append(node.val)if node.left:queue.append(node.left)if node.right:queue.append(node.right)return resif __name__ == '__main__':f = Node(7)e = Node(5)e.left = fd = Node(4)c = Node(3)b = Node(2)b.left = db.right = ea = Node(1)a.left = ba.right = cprint(solve(a))
- 運行結果
- 補充說明
- 具體代碼可以查看我的Github,歡迎Star或者Fork
- 參考書《你也能看得懂的Python算法書》
- 書中錯誤已經修改
總結
以上是生活随笔為你收集整理的广度优先遍历算法-03树的右侧问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 广度优先遍历算法-02合法的括号问题
- 下一篇: 回溯算法-01遍历所有排列方式问题