[树]输出二叉树的节点层数

该博客介绍了如何根据二叉树的先序遍历序列,确定每个节点所在的层数。内容涉及二叉树结构、遍历算法的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给出一个二叉树先序遍历序列(没有孩子用空格表示)
先序遍历输出各节点的所在层数


#include<stdio.h>
#include<stdlib.h>

typedef struct BinTNode
{
    char data;
    struct BinTNode *lchild, *rchild;
}BinTNode, *BinTree;

void CreatBinTree(BinTree *T);
void PreOrderTraverse(BinTree T, int level);

int main()
{
    BinTree T = NULL;
    int level = 1;
    CreatBinTree(&T);
    PreOrderTraverse(T, level);
    return 0;
}

void CreatBinTree(BinTree *T) //递归建立二叉树 , 约定前序输入 
{
    char c;
    scanf("%c", &c);
    if(c == ' ')
        (*T) =
在C++中,遍历输出二叉树的第k层结点通常可以使用层次遍历(也叫广度优先搜索,BFS),因为层次遍历按照节点中的层级顺序逐层访问。以下是一个基本的递归队列方法来解决这个问题: ```cpp #include <iostream> #include <queue> // 定义二叉树节点 struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; void printKthLevel(TreeNode* root, int k) { if (root == nullptr || k <= 0) return; // 如果根为空或层数小于等于0,直接返回 std::queue<TreeNode*> q; // 队列用于存储每一层的节点 q.push(root); for (int i = 1; i <= k; ++i) { while (!q.empty()) { int size = q.size(); // 当前层的节点数量 for (int j = 0; j < size; ++j) { TreeNode* node = q.front(); q.pop(); std::cout << node->val << " "; // 输出节点值 if (node->left) q.push(node->left); // 将左子节点加入队列 if (node->right) q.push(node->right); // 将右子节点加入队列 } std::cout << "\n"; // 每一层结束后换行 } } } // 示例使用 int main() { TreeNode* root = new TreeNode(1); // 构造你的二叉树... int k = 2; // 要打印的层数 printKthLevel(root, k); return 0; } ``` 在这个示例中,`printKthLevel`函数接收二叉树的根节点层数k作为输入。它首先检查是否合法,然后创建一个队列,将根节点放入队列。接着进入一个循环,直到层数k遍历完毕。在每层的循环内部,先获取该层所有节点的数量,并依次处理每个节点,将其值输出,同时将其左右子节点加入队列。当一层的所有节点都处理完后,换行开始下一层。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值