二叉树的层序遍历

原二叉树:
   3
   / \
  9  20
    /  \
   15   7
要求遍历结果:
[
  [3],
  [9,20],
  [15,7]
]

代码及注释

package main

import "fmt"

func main() {
	root := buildTree()
	fmt.Println(levelOrder(root))
}

type TreeNode struct {
	Val   int
	Left  *TreeNode
	Right *TreeNode
}

func levelOrder(root *TreeNode) [][]int {
	if root == nil {
		return nil
	}
	res := [][]int{}
	cLevelNodes := []*TreeNode{root}        // 当前层节点
	for i := 0; len(cLevelNodes) > 0; i++ { // 每次遍历当前层节点
		res = append(res, []int{})
		// 定义下一层节点数据
		nLevelNodes := []*TreeNode{}
		for j := 0; j < len(cLevelNodes); j++ { // 内层循环将当前层的所有节点取出
			res[i] = append(res[i], cLevelNodes[j].Val)
			// 获取当前层的左右节点,并赋值给nLevelNodes
			if cLevelNodes[j].Left != nil {
				nLevelNodes = append(nLevelNodes, cLevelNodes[j].Left)
			}
			if cLevelNodes[j].Right != nil {
				nLevelNodes = append(nLevelNodes, cLevelNodes[j].Right)
			}
		}
		cLevelNodes = nLevelNodes // 继续遍历下一层
	}
	return res
}

func buildTree() *TreeNode {
	return &TreeNode{
		Val: 3,
		Left: &TreeNode{
			Val:   9,
			Left:  nil,
			Right: nil,
		},
		Right: &TreeNode{
			Val: 20,
			Left: &TreeNode{
				Val:   15,
				Left:  nil,
				Right: nil,
			},
			Right: &TreeNode{
				Val:   7,
				Left:  nil,
				Right: nil,
			},
		},
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值