输出二叉树每层节点数量

/* 输出二叉树每层的节点*/
typedef struct node{
	struct node* left;
	struct node* right;
	node(){
		left = NULL;
		right = NULL;
	};
} node,*nodeptr;
 
void count(vector<node> layerlist){
	if (layerlist.size() == 0)
		return;
	vector<node> vec;
	int countt = 0;
	for(auto c : layerlist){//对该层每个节点检查,存在一个节点数量加一, 如果该节点有孩子,则将孩子节点加入到下一层节点列表
		countt ++;
		if(c.left)
			vec.push_back(*c.left);
		if(c.right)
			vec.push_back(*c.right);
	}
	cout<<countt<<endl;
	count(vec);//处理下一层节点
}
 int main(){
 	node a;
 	node b;
 	node c;
 	node d;
 	node e;
 	node f;
 	node g;
 	a.left = &b;
 	a.right = NULL;
 	b.right = &c;
 	b.left = &d;
 	c.left = &e;
 	c.right = &f;
 	d.left = &g;
 	vector<node> aa = { a };
 	count(aa);

 }

在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遍历完毕。在每层的循环内部,先获取该层所有节点数量,并依次处理每个节点,将其值输出,同时将其左右子节点加入队列。当一层的所有节点都处理完后,换行开始下一层。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值