1. 程式人生 > 實用技巧 >IDEA中mybatis generator使用

IDEA中mybatis generator使用

題目描述:

給你一個二叉樹,請你返回其按 層序遍歷 得到的節點值。(即逐層地,從左到右訪問所有節點)。

示例:二叉樹:[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
}

  地址:https://mp.weixin.qq.com/s/Gb9bg04PMR4mwM2ZET8HnA