IDEA中mybatis generator使用
阿新 • • 發佈:2020-08-11
題目描述:
給你一個二叉樹,請你返回其按 層序遍歷 得到的節點值。(即逐層地,從左到右訪問所有節點)。
示例:二叉樹:[3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其層次遍歷結果:
[ [3], [9,20], [15,7] ]
解題思路:
首先我們要知道層序遍歷考查的其實就是廣度優先遍歷(BFS),聰明的朋友肯定還知道他的孿生兄弟深度優先遍歷(DFS),篇幅較長這裡就不過多介紹,感興趣的朋友請自行了解。
要想完成廣度優先遍歷,我們要藉助佇列(先進先出,後進後出)的概念。
思想 :當佇列中的隊首出隊的時候,要從二叉搜尋樹中找到它的兩個孩子入隊。隊列出隊為空的時候,就將二叉樹遍歷完成了。
我們再歸納一下廣度優先遍歷的步驟:
1、將根節點入隊(入隊的時候不做別的操作);
2、佇列非空,所以接下來就要出隊,規則是:依次出隊,只要出隊的元素有孩子,左右孩子依次入隊,如果沒有孩子不做任何操作。
另外,由於此題的返回資料格式是封裝每層,所以這裡可以定義一個count計錄每層的數量
用簡便圖解如下:
//go //* Definition for a binary tree node. type TreeNode struct { Val int Left *TreeNode Right *TreeNode } func levelOrder(root *TreeNode) [][]int { var res [][]int if root == nil { return res } queue := make([]*TreeNode,0) queue = append(queue, root) // 新增到隊尾,等於add() for len(queue) != 0 { count := len(queue) var list []int for count > 0 { node := queue[0] //取出隊首,等於poll() queue = queue[1:] //移出隊首更新佇列 list = append(list, node.Val) if node.Left != nil { queue = append(queue, node.Left) } if node.Right != nil { queue = append(queue, node.Right) } count-- } res = append(res, list) } return res }