题解 | #从上往下打印二叉树#
从上往下打印二叉树
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 文章被收录于专栏
记录自己的解题思路, 欢迎评价