📜  门| GATE CS 2021 |套装2 |问题10(1)

📅  最后修改于: 2023-12-03 14:58:21.397000             🧑  作者: Mango

门| GATE CS 2021 |套装2 |问题10

这是一道 GATE CS 2021 套装中的问题。该问题考察了程序员在数据结构和算法方面的知识。

题目描述

给定一颗二叉树,其中每个节点都包含如下内容:

struct Node {
  int value;  // 节点值
  Node* left; // 左子树
  Node* right; // 右子树
};

现在需要实现一个函数来找到二叉树中深度最浅的叶子节点,函数签名如下:

Node* find_shallowest_leaf_node(Node* root);
解题思路

我们可以采用层次遍历二叉树的方式来寻找深度最浅的叶子节点。具体实现如下:

  1. 首先将根节点入队。
  2. 然后循环以下步骤:
    1. 取出队列中的节点。
    2. 判断该节点是否是叶子节点,如果是则直接返回该节点。
    3. 将该节点的非空子节点入队。
代码实现
Node* find_shallowest_leaf_node(Node* root) {
  if (root == nullptr) {
    return nullptr;
  }
  queue<Node*> q;        // 定义一个队列来进行层次遍历
  q.push(root);          // 将根节点入队
  while (!q.empty()) {   // 循环直到队列为空
    Node* cur = q.front();
    q.pop();
    if (cur->left == nullptr && cur->right == nullptr) {
      return cur;        // 如果是叶子节点直接返回该节点
    }
    if (cur->left) {     // 如果左子树非空则入队
      q.push(cur->left);
    }
    if (cur->right) {    // 如果右子树非空则入队
      q.push(cur->right);
    }
  }
  return nullptr;        // 如果二叉树中没有叶子节点,则返回 nullptr
}
总结

本题考察了程序员对二叉树的遍历方式的熟练掌握以及数据结构和算法的基础知识。在实现过程中采用了队列的数据结构来辅助进行层次遍历。