- 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行
-
如下图打印结果为
8
6 10
5 7 9 11
题目解读
代码
void PrintFromTopToBottom(TreeNode* root){
if(root == NULL){
// 二叉树为空,什么也不用做...
}
else{
queue<TreeNode *> que;
que.push(root);
int toBePrint = 1;
int nextLevel = 0;
while(que.size()){
TreeNode *temp = que.front();
cout<<temp -> val<<" ";
toBePrint --;
que.pop();
if(temp -> left){
que.push(temp -> left);
nextLevel ++;
}
if(temp -> right){
que.push(temp -> right);
nextLevel ++;
}
if(toBePrint == 0){
cout<<endl;
toBePrint = nextLevel;
nextLevel = 0;
}
}
}
}
class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot) {
vector<vector<int> > result;
vector<int> temp;
deque<TreeNode* > que;
int tobePrint = 1;
int nextLevel = 0;
if(pRoot == NULL){
return result;
}
que.push_back(pRoot);
while(!que.empty()){
TreeNode* tt = que.front();
que.pop_front();
temp.push_back(tt->val);
tobePrint--;
if(tt->left != NULL){
que.push_back(tt->left);
nextLevel++;
}
if(tt->right != NULL){
que.push_back(tt->right);
nextLevel++;
}
if(tobePrint == 0){
tobePrint = nextLevel;
nextLevel = 0;
result.push_back(temp);
temp.clear();
}
}
return result;
}
};
总结展望
- 思路很好,以前感觉自己编程能力很好,现在感觉也就一般般,唉,努力努力再努力