给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
例如:
给定二叉树: [3,9,20,null,null,15,7]
,
3 / 9 20 / 15 7
返回其层次遍历结果:
[ [3], [9,20], [15,7] ]
思路:按层次遍历节点,我们需要将每层的节点按顺序存起来,这个时候用到了队列,先入先出,访问每个节点,顺便将这个节点的左右子树再存入队列中,这样并不会妨碍下个要访问的节点。
vector<vector<int>> levelOrder(TreeNode* root) { vector<vector<int> > ans; vector<int> tmp; queue<TreeNode*> q; if(root) q.push(root); while(!q.empty()) { int len=q.size(); int i=0; while(i<len)//每次用len来得知当前层有多少个节点,否则等一会有节点再放入就干扰了,所以这里不能用empty来判断 { TreeNode* cur=q.front();//每次都取队列的首节点 q.pop(); tmp.push_back(cur->val); i++; if(cur->left) q.push(cur->left); if(cur->right) q.push(cur->right); } ans.push_back(tmp); tmp.clear(); } return ans; }
至于后续的题目二叉树的层次遍历II,是自底向上的遍历,这个时候加个stack结构,将顺序反一下就好了,这里就不再赘述了。