mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 03:34:02 +08:00
优化二叉树层序遍历116和117题的go方法
This commit is contained in:
@ -1891,36 +1891,35 @@ go:
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
func connect(root *Node) *Node {
|
func connect(root *Node) *Node {
|
||||||
res:=[][]*Node{}
|
if root == nil { //防止为空
|
||||||
if root==nil{//防止为空
|
|
||||||
return root
|
return root
|
||||||
}
|
}
|
||||||
queue:=list.New()
|
queue := list.New()
|
||||||
queue.PushBack(root)
|
queue.PushBack(root)
|
||||||
var tmpArr []*Node
|
tmpArr := make([]*Node, 0)
|
||||||
for queue.Len()>0 {
|
for queue.Len() > 0 {
|
||||||
length:=queue.Len()//保存当前层的长度,然后处理当前层(十分重要,防止添加下层元素影响判断层中元素的个数)
|
length := queue.Len() //保存当前层的长度,然后处理当前层(十分重要,防止添加下层元素影响判断层中元素的个数)
|
||||||
for i:=0;i<length;i++{
|
for i := 0; i < length; i++ {
|
||||||
node:=queue.Remove(queue.Front()).(*Node)//出队列
|
node := queue.Remove(queue.Front()).(*Node) //出队列
|
||||||
if node.Left!=nil{
|
if node.Left != nil {
|
||||||
queue.PushBack(node.Left)
|
queue.PushBack(node.Left)
|
||||||
}
|
}
|
||||||
if node.Right!=nil{
|
if node.Right != nil {
|
||||||
queue.PushBack(node.Right)
|
queue.PushBack(node.Right)
|
||||||
}
|
}
|
||||||
tmpArr=append(tmpArr,node)//将值加入本层切片中
|
tmpArr = append(tmpArr, node) //将值加入本层切片中
|
||||||
}
|
}
|
||||||
res=append(res,tmpArr)//放入结果集
|
if len(tmpArr) > 1 {
|
||||||
tmpArr=[]*Node{}//清空层的数据
|
// 遍历每层元素,指定next
|
||||||
}
|
for i := 0; i < len(tmpArr)-1; i++ {
|
||||||
//遍历每层元素,指定next
|
tmpArr[i].Next = tmpArr[i+1]
|
||||||
for i:=0;i<len(res);i++{
|
}
|
||||||
for j:=0;j<len(res[i])-1;j++{
|
|
||||||
res[i][j].Next=res[i][j+1]
|
|
||||||
}
|
}
|
||||||
|
tmpArr = []*Node{} //清空层的数据
|
||||||
}
|
}
|
||||||
return root
|
return root
|
||||||
}
|
}
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Swift:
|
Swift:
|
||||||
@ -2172,33 +2171,31 @@ go:
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
func connect(root *Node) *Node {
|
func connect(root *Node) *Node {
|
||||||
res:=[][]*Node{}
|
if root == nil { //防止为空
|
||||||
if root==nil{//防止为空
|
|
||||||
return root
|
return root
|
||||||
}
|
}
|
||||||
queue:=list.New()
|
queue := list.New()
|
||||||
queue.PushBack(root)
|
queue.PushBack(root)
|
||||||
var tmpArr []*Node
|
tmpArr := make([]*Node, 0)
|
||||||
for queue.Len()>0 {
|
for queue.Len() > 0 {
|
||||||
length:=queue.Len()//保存当前层的长度,然后处理当前层(十分重要,防止添加下层元素影响判断层中元素的个数)
|
length := queue.Len() //保存当前层的长度,然后处理当前层(十分重要,防止添加下层元素影响判断层中元素的个数)
|
||||||
for i:=0;i<length;i++{
|
for i := 0; i < length; i++ {
|
||||||
node:=queue.Remove(queue.Front()).(*Node)//出队列
|
node := queue.Remove(queue.Front()).(*Node) //出队列
|
||||||
if node.Left!=nil{
|
if node.Left != nil {
|
||||||
queue.PushBack(node.Left)
|
queue.PushBack(node.Left)
|
||||||
}
|
}
|
||||||
if node.Right!=nil{
|
if node.Right != nil {
|
||||||
queue.PushBack(node.Right)
|
queue.PushBack(node.Right)
|
||||||
}
|
}
|
||||||
tmpArr=append(tmpArr,node)//将值加入本层切片中
|
tmpArr = append(tmpArr, node) //将值加入本层切片中
|
||||||
}
|
}
|
||||||
res=append(res,tmpArr)//放入结果集
|
if len(tmpArr) > 1 {
|
||||||
tmpArr=[]*Node{}//清空层的数据
|
// 遍历每层元素,指定next
|
||||||
}
|
for i := 0; i < len(tmpArr)-1; i++ {
|
||||||
//遍历每层元素,指定next
|
tmpArr[i].Next = tmpArr[i+1]
|
||||||
for i:=0;i<len(res);i++{
|
}
|
||||||
for j:=0;j<len(res[i])-1;j++{
|
|
||||||
res[i][j].Next=res[i][j+1]
|
|
||||||
}
|
}
|
||||||
|
tmpArr = []*Node{} //清空层的数据
|
||||||
}
|
}
|
||||||
return root
|
return root
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user