题解 | #从上往下打印二叉树#

从上往下打印二叉树

https://www.nowcoder.com/practice/7fe2212963db4790b57431d9ed259701

/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
#include <stack>
class Solution {
public:
    vector<int> PrintFromTopToBottom(TreeNode* root) {
		std::queue<TreeNode *> my_queue;
		std::vector<int> my_list;
		if (root == nullptr) {
			return  my_list;
		}
		my_queue.push(root);
		TreeNode *cur;
		while (!my_queue.empty()) {
			cur = my_queue.front();
			my_queue.pop();

			my_list.emplace_back(cur->val);

			if (cur->left) {
				my_queue.push(cur->left);
			}
			if (cur->right){
				my_queue.push(cur->right);
			}
		}
		return my_list;
    }
};

这道题又叫做 二叉树的层次遍历

思路:

利用queue的FIFO的特点, 每次当queue出队(front)的时候,需要把弹出节点的左右子树节点入队(enqueue/psuh)

这样就能保证层次性

我之前写的时候做错过一次;

出错的地方在于判断左右左子结点

之前写的时候,是这样:

if (cur->right) {
  my_queue.push(cur->right);
}else {
  // 这里写分支判断是不对的, 因为 cur->right 和cur->left 并不是互斥的条件!!!!!
  my_queue.push(cur->left);
}

note_coding 文章被收录于专栏

记录自己的解题思路, 欢迎评价

全部评论

相关推荐

没测评没笔试没感谢信直接无了
投递联发科技等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务