📜  门| GATE-CS-2006 |第 75 题(1)

📅  最后修改于: 2023-12-03 15:12:41.420000             🧑  作者: Mango

门| GATE-CS-2006 |第 75 题介绍

这是GATE-CS-2006中的第75道题目。这个问题要求我们使用队列实现二叉树的层次遍历。因为二叉树是一个有层次结构的树形结构,因此层次遍历非常适合处理二叉树。下面我们来看一下问题的详情。

问题描述

给定一颗二叉树,将元素按照层次顺序输出。一个节点的子节点从左到右依次放在队列的末端,这样就可以保证当前队列中的节点都是在同一层上的。

解题思路

为了解决这个问题,我们使用一个队列来实现树的层次遍历。队列中我们开始将根节点放入队列中。对于队列中的每个节点,我们将其弹出并把它的左子节点和右子节点(如果存在)分别放入队列的末尾。我们继续这个过程直到最后一个节点被弹出。

下图展示了我们用队列实现层次遍历的过程。

queue-tree-traversal

代码实现

下面是使用Java代码实现二叉树的层次遍历。请注意,我们使用了Java集合框架中的Queue接口和LinkedList类来实现队列。

import java.util.*;

// 二叉树节点定义
class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
 
    public TreeNode(int val) {
        this.val = val;
    }
}

public class BinaryTreeTraversal {
    public List<Integer> levelOrderTraversal(TreeNode root) {
        List<Integer> result = new ArrayList<>();
        Queue<TreeNode> queue  = new LinkedList<>();
        if (root == null) {
            return result;
        }
        queue.offer(root);
        while (!queue.isEmpty()) {
            TreeNode node = queue.poll();
            result.add(node.val);
            if (node.left != null) {
                queue.offer(node.left);
            }
            if (node.right != null) {
                queue.offer(node.right);
            }
        }
        return result;
    }
}
总结

本题通过一个简单的队列实现了二叉树的层次遍历。这是二叉树遍历中最常见的一种方法。

欢迎各位读者提出宝贵的意见和建议。