Leetcode 559. Maximum Depth of N-ary Tree
求樹的最大深度,解這種題目可以思考要用DFS還是BFS。
DFS多半用遞迴解,BFS多半用Queue去存取adjacent node。
DFS思維是從起點出發會一直往深度去尋訪,故,深度優先搜尋:
- Start Node為1
- 我們默認左側的child node會先被搜索到,所以3->5
- ->6
- ->2
- ->4
可以想像每一次找到子節點再遞迴下去孫節點,直到找到NULL。
沒找到一個子節點等同於深度加1,找到NULL就return 0。
BFS思維是從起點出發會一直往深度去尋訪,故,廣度優先搜尋:
- 建立一個queue,並把root node放進去,初始化depth = 0
- 每次會算出當所在level的廣度breadth(即第三步算出的節點數目),depth + 1
- Queue 是FIFO,故取q.front為當前節點,接著q.pop()把queue裡的node刪除,這邊用auto來獲取當前node
- 當前node的子節點,會用for ( auto child : node->children)來遍歷,並把每個節點push到queue裡面。
- 重複2-4直到q為空
- return depth
留言
張貼留言