#419. 从左到右输出第 n 层的节点编号

从左到右输出第 n 层的节点编号

从左到右输出第 n 层的节点编号

题目描述

给定一棵用先序遍历(含空指针标记)表示的二叉树(-1 表示空指针),以及一个正整数 n(根为第 1 层),请从左到右输出该二叉树第 n 层的所有节点编号。

先序序列构建二叉树模板代码:

struct Node {
    int data;
    Node* left, *right;
};

// 按先序创建,-1 表示空
Node* build() {
    int x; std::cin >> x;
    if (x == -1) return nullptr;
    Node* node = new Node();
    node->data = x;
    node->left  = build();
    node->right = build();
    return node;
}

int main() {
    Node* root = build();
}

输入格式

  • 第 1 行:若干个整数,表示二叉树的先序遍历序列,使用 -1 表示空节点,数之间以空格分隔。先序顺序为:根、左子树、右子树,空子树以 -1 占位。
  • 第 2 行:一个正整数 n,表示需要输出的层号(根为第 1 层)。

输出格式

  • 输出一行:从左到右依次输出第 n 层的所有节点编号,编号之间用一个空格分隔;若该层无任何节点,输出空行。

输入输出样例 #1

输入 #1

1 2 -1 -1 3 4 -1 -1 5 -1 -1
2

输出 #1

2 3

输入输出样例 #2

输入 #2

1 -1 -1
3

输出 #2


说明/提示

  • 约定:输入使用先序遍历(根、左、右),以 -1 作为空指针占位。
  • 若第 n 层不存在,输出空行。
  • 可用递归(求第 n 层节点并追加到序列)或队列分层法实现。