《从头再来》剑指offer.32I 从上到下打印二叉树
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
涉及到二叉树的打印问题,其实用到递归就好了。但是,递归只能解决前序遍历、中序遍历、后序遍历的打印,不能解决层序遍历的打印。所以从上往下打印二叉树层序遍历的情况下,我们需要借助一个队列来帮助我们解决问题。
队列存在的目的就是保留我们层序遍历到的节点,为层序遍历做一个记录。当一个节点出队列时,需要在队列的末尾入队该节点的左右子树(当然需要满足左右子树不为空才能入队),循环的将队列的头元素的值压入result数组中,直到队列中没有元素。(在循环前一定要先将根结点压入队列,否则循环还没开始就结束了!)
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector<int> levelOrder(TreeNode* root) { vector<int> result; if(root == nullptr) return result; //借助队列来存储每一层的节点,节点出队,则将它的左右子树加入队列 queue<TreeNode*> que; //首先将根结点入队 que.push(root); while(!que.empty()){ TreeNode* tmpnode = que.front();//取得队列的头元素 //将头元素的值加入result数组 result.push_back(tmpnode->val); //头元素出队 que.pop(); //在队尾加入头节点的左右子树 if(tmpnode->left != nullptr) que.push(tmpnode->left); if(tmpnode->right != nullptr) que.push(tmpnode->right); } return result; } };
《从头再来》

浙公网安备 33010602011771号