Merge pull request #107 from NovaHe/fix/102

fix 0102:  优化代码,清除冗余代码
This commit is contained in:
halfrost
2021-04-01 20:41:06 +08:00
committed by YDZ
2 changed files with 64 additions and 72 deletions

View File

@ -21,50 +21,42 @@ func levelOrder(root *TreeNode) [][]int {
if root == nil { if root == nil {
return [][]int{} return [][]int{}
} }
queue := []*TreeNode{} queue := []*TreeNode{root}
queue = append(queue, root) res := make([][]int, 0)
curNum, nextLevelNum, res, tmp := 1, 0, [][]int{}, []int{} for len(queue) > 0 {
for len(queue) != 0 { l := len(queue)
if curNum > 0 { tmp := make([]int, 0, l)
node := queue[0] for i := 0; i < l; i++ {
if node.Left != nil { if queue[i].Left != nil {
queue = append(queue, node.Left) queue = append(queue, queue[i].Left)
nextLevelNum++
} }
if node.Right != nil { if queue[i].Right != nil {
queue = append(queue, node.Right) queue = append(queue, queue[i].Right)
nextLevelNum++
} }
curNum-- tmp = append(tmp, queue[i].Val)
tmp = append(tmp, node.Val)
queue = queue[1:]
} }
if curNum == 0 { queue = queue[l:]
res = append(res, tmp) res = append(res, tmp)
curNum = nextLevelNum
nextLevelNum = 0
tmp = []int{}
}
} }
return res return res
} }
// 解法二 DFS // 解法二 DFS
func levelOrder1(root *TreeNode) [][]int { func levelOrder1(root *TreeNode) [][]int {
levels := [][]int{} var res [][]int
dfsLevel(root, -1, &levels) var dfsLevel func(node *TreeNode, level int)
return levels dfsLevel = func(node *TreeNode, level int) {
}
func dfsLevel(node *TreeNode, level int, res *[][]int) {
if node == nil { if node == nil {
return return
} }
currLevel := level + 1 if len(res) == level {
for len(*res) <= currLevel { res = append(res, []int{node.Val})
*res = append(*res, []int{}) } else {
res[level] = append(res[level], node.Val)
} }
(*res)[currLevel] = append((*res)[currLevel], node.Val) dfsLevel(node.Left, level+1)
dfsLevel(node.Left, currLevel, res) dfsLevel(node.Right, level+1)
dfsLevel(node.Right, currLevel, res) }
dfsLevel(root, 0)
return res
} }

View File

@ -50,6 +50,13 @@ return its level order traversal as:
package leetcode package leetcode
import (
"github.com/halfrost/LeetCode-Go/structures"
)
// TreeNode define
type TreeNode = structures.TreeNode
/** /**
* Definition for a binary tree node. * Definition for a binary tree node.
* type TreeNode struct { * type TreeNode struct {
@ -64,53 +71,46 @@ func levelOrder(root *TreeNode) [][]int {
if root == nil { if root == nil {
return [][]int{} return [][]int{}
} }
queue := []*TreeNode{} queue := []*TreeNode{root}
queue = append(queue, root) res := make([][]int, 0)
curNum, nextLevelNum, res, tmp := 1, 0, [][]int{}, []int{} for len(queue) > 0 {
for len(queue) != 0 { l := len(queue)
if curNum > 0 { tmp := make([]int, 0, l)
node := queue[0] for i := 0; i < l; i++ {
if node.Left != nil { if queue[i].Left != nil {
queue = append(queue, node.Left) queue = append(queue, queue[i].Left)
nextLevelNum++
} }
if node.Right != nil { if queue[i].Right != nil {
queue = append(queue, node.Right) queue = append(queue, queue[i].Right)
nextLevelNum++
} }
curNum-- tmp = append(tmp, queue[i].Val)
tmp = append(tmp, node.Val)
queue = queue[1:]
} }
if curNum == 0 { queue = queue[l:]
res = append(res, tmp) res = append(res, tmp)
curNum = nextLevelNum
nextLevelNum = 0
tmp = []int{}
}
} }
return res return res
} }
// 解法二 DFS // 解法二 DFS
func levelOrder1(root *TreeNode) [][]int { func levelOrder1(root *TreeNode) [][]int {
levels := [][]int{} var res [][]int
dfsLevel(root, -1, &levels) var dfsLevel func(node *TreeNode, level int)
return levels dfsLevel = func(node *TreeNode, level int) {
}
func dfsLevel(node *TreeNode, level int, res *[][]int) {
if node == nil { if node == nil {
return return
} }
currLevel := level + 1 if len(res) == level {
for len(*res) <= currLevel { res = append(res, []int{node.Val})
*res = append(*res, []int{}) } else {
res[level] = append(res[level], node.Val)
} }
(*res)[currLevel] = append((*res)[currLevel], node.Val) dfsLevel(node.Left, level+1)
dfsLevel(node.Left, currLevel, res) dfsLevel(node.Right, level+1)
dfsLevel(node.Right, currLevel, res)
} }
dfsLevel(root, 0)
return res
}
``` ```