题解 | #牛群分层排列# java

牛群分层排列

https://www.nowcoder.com/practice/7e98027a60424c9ba88d9c4c0506ede4

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param root TreeNode类 
     * @return string字符串一维数组
     */
    public String[] levelOrder (TreeNode root) {
        // write code here
List<String> result = new ArrayList<>();
        if (root == null) {
            return new String[]{};
        }

        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);

        while (!queue.isEmpty()) {
            int levelSize = queue.size();
            StringBuilder currLevelStr = new StringBuilder();

            for (int i = 0; i < levelSize; i++) {
                TreeNode node = queue.poll();

                currLevelStr.append(node.val);
                if (node.left != null) {
                    queue.offer(node.left);
                }
                if (node.right != null) {
                    queue.offer(node.right);
                }
            }
            result.add(currLevelStr.toString());
        }

        return result.toArray(new String[result.size()]);
    }
}

该题考察的知识点是二叉树的层序遍历。

解题思路如下:

  1. 首先判断根节点是否为空,如果为空,则返回一个空数组。
  2. 创建一个队列 queue,用于存储待遍历的节点。
  3. 将根节点入队。
  4. 进入循环,直到队列为空:获取当前层的节点数量 levelSize,用于控制内层的循环次数。创建一个 StringBuilder 对象 currLevelStr,用于存储当前层的节点值。内层循环遍历当前层的节点:出队一个节点 node。将 node 的值照着顺序添加到 currLevelStr 中。如果 node 的左子节点不为空,将左子节点入队。如果 node 的右子节点不为空,将右子节点入队。将 currLevelStr 转为字符串,并将其添加到结果列表 result 中。
  5. 将结果列表 result 转为字符串数组,并返回。

这样就实现了对二叉树进行层序遍历,并将结果以字符串数组的形式返回。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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