剑指offer---把二叉树打印成多行

把二叉树打印成多行

题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
思路:
思路:
1.用一个队列来保存下次要打印的节点,通过队列是否为空做外循环
2.用low和high来记录当前层的节点数,用于内循环
3.每次插入完之后要把v清空

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
*/
//思路:用一个队列来保存下次要打印的节点
//1.用low和high来记录当前层的节点数
//2.每次插入完之后要把v清空
class Solution {
public:
      vector<vector<int>> Print(TreeNode* pRoot) {

		vector<vector<int>> vv;
		vector<int> v;
		
		queue<TreeNode*> q;
		TreeNode* cur = nullptr;
		if (pRoot == nullptr)
			return vv;
		//先插入头节点
		q.push(pRoot);
		//用来保存每层的节点个数
		int low =0, high = q.size();
		//队列空遍历完毕
		while (!q.empty())
		{
			//vector<int> v;不用clea清空v
			//每次要更新节点数
			low = 0; high = q.size();
			//一层完,循环结束
			while (low++ < high)
			{
				//取队头元素插入
				cur = q.front();
				v.push_back(cur->val);
				//cout << cur->val << " ";
				q.pop();//弹出
					//接着按顺序把他的左右孩子入队
				if (cur->left != nullptr)
					q.push(cur->left);
				if (cur->right != nullptr)
					q.push(cur->right);
			}
			//cout << endl;
			//插入到vv里面
			vv.push_back(v);
			//清空v里面的元素,后者在里面每次重新定义一个v,就不用clear
			v.clear();	
		}	
		return vv;
	}
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值