leetcode面试二叉树的层序遍历

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
type MyCircularQueue struct {
    Parr []*TreeNode
    Head int
    Tail int
    Length int
    Cap int
}


func Constructor(k int) MyCircularQueue {
    return MyCircularQueue{
        Parr: make([]*TreeNode, k),
        Head: 0,
        Tail: 0,
        Length: k,
        Cap: 0,
    }
}


func (this *MyCircularQueue) EnQueue(value *TreeNode) bool {
    if this.Head == this.Tail && this.Cap > 0{
        return false
    }

    this.Parr[this.Tail] = value
    this.Tail = this.Tail + 1

    if this.Tail == this.Length {
        this.Tail = 0
    }

    this.Cap = this.Cap + 1
    return true
}


func (this *MyCircularQueue) DeQueue() bool {
    if this.Head == this.Tail && this.Cap == 0 {
        return false
    }

    this.Head = this.Head + 1
    if this.Head == this.Length {
        this.Head = 0
    }

    this.Cap = this.Cap - 1

    return true
}


func (this *MyCircularQueue) Front() *TreeNode {
    if this.IsEmpty() {
        return nil
    }
    return this.Parr[this.Head]
}


func (this *MyCircularQueue) Rear() *TreeNode {
    if this.IsEmpty() {
        return nil
    }

    index := (this.Tail - 1 + this.Length) % this.Length
    return this.Parr[index]
}


func (this *MyCircularQueue) IsEmpty() bool {
    if this.Tail == this.Head && this.Cap == 0{
        return true
    }else {
        return false
    }
}


func (this *MyCircularQueue) IsFull() bool {
    if this.Head == this.Tail && this.Cap > 0{
        return true
    }else {
        return false
    }
}

func levelOrder(root *TreeNode) [][]int {
    cirQueue := Constructor(1000)
    rsp := make([][]int, 0)
    if nil == root {
        return rsp
    }

    cirQueue.EnQueue(root)

    for ; !cirQueue.IsEmpty(); {
        size := cirQueue.Cap
        tempSlict := make([]int, 0)
        for i := 0; i < size; i = i + 1 {
            
            node := cirQueue.Front()

            tempSlict = append(tempSlict, node.Val)

            cirQueue.DeQueue()

            if node.Left != nil {
                cirQueue.EnQueue(node.Left)
            }

            if node.Right != nil {
                cirQueue.EnQueue(node.Right)
            }

            
        }
        rsp = append(rsp, tempSlict)

    } 
    return rsp
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值