题解 | #按之字形顺序打印二叉树#

按之字形顺序打印二叉树

https://www.nowcoder.com/practice/91b69814117f4e8097390d107d2efbe0?tpId=13&tqId=23454&ru=/exam/oj/ta&qru=/ta/coding-interviews/question-ranking&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D13

利用队列思想 + 二叉树的层次遍历。

package main

import . "nc_tools"

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

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param pRoot TreeNode类
 * @return int整型二维数组
 */
func Print(pRoot *TreeNode) [][]int {
	// write code here
	var result [][]int

	if pRoot == nil {
		return result
	}

    queue := []*TreeNode{pRoot}  // 模拟队列

	for len(queue) > 0 {

		var levelNodes []int
	
		size := len(queue)
		for i := 0 ; i <= size -1 ; i++ {
			node := queue[0] //取出队首位置的节点
			queue = queue[1:] // 更新队列
			if len(result)%2 == 0 { // 结果中如果是偶数,即将到来的下一层则是奇数层,顺序加入
				levelNodes = append(levelNodes, node.Val)//奇数层顺序加入
			}else {
				levelNodes = append([]int{node.Val}, levelNodes...)//偶数层逆序加入
			}

			if node.Left != nil {   
				queue = append(queue, node.Left)
			}

			if node.Right != nil {
				queue = append(queue, node.Right)
			}
		} 
		result = append(result, levelNodes)
	}
	return result
}

全部评论

相关推荐

点赞 评论 收藏
分享
昨天 14:15
门头沟学院 Java
点赞 评论 收藏
分享
06-17 21:57
门头沟学院 Java
白友:噗嗤,我发现有些人事就爱发这些,明明已读不回就行了,就是要恶心人
点赞 评论 收藏
分享
程序员小白条:你是沟通了900个,不是投了900份简历,你能投900份,意味着对面都要回复你900次,你早就找到实习了,没亮点就是这样的,别局限地区,时间投的也要早,现在都要7月了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务