题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
解题思路
bst常规题,用两个变量控制层数的方法棒。
Code
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
vector<vector<int> > Print(TreeNode* pRoot) {
vector<vector<int> > result;
if(!pRoot) return result;
queue<TreeNode*> q;
q.push(pRoot);
vector<int> temp;
int currentLayerCount = 1, nextLayerCount = 0;
while(!q.empty()) {
TreeNode* currentNode = q.front();
q.pop();
temp.push_back(currentNode->val);
currentLayerCount --;
if(currentNode->left) {
q.push(currentNode->left);
nextLayerCount++;
}
if(currentNode->right) {
q.push(currentNode->right);
nextLayerCount++;
}
if(!currentLayerCount) {
currentLayerCount = nextLayerCount;
nextLayerCount = 0;
result.push_back(temp);
temp.clear();
}
}
return result;
}
};
- java
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer> > result = new ArrayList<ArrayList<Integer> >();
if(pRoot != null) {
LinkedList<TreeNode> queue = new LinkedList<>();
queue.add(pRoot);
int currentCount = 0, currentLevelAmount = 1, nextLevelAmount = 0;
ArrayList<Integer> layer = new ArrayList<>();
while(queue.size() > 0) {
TreeNode currentNode = queue.peek();
layer.add(currentNode.val);
queue.pop();
currentCount++;
if(currentNode.left != null) {
queue.add(currentNode.left);
nextLevelAmount++;
}
if(currentNode.right != null) {
queue.add(currentNode.right);
nextLevelAmount++;
}
if(currentCount == currentLevelAmount) {
currentLevelAmount = nextLevelAmount;
nextLevelAmount = currentCount = 0;
result.add(layer);
layer = new ArrayList<>();
}
}
}
return result;
}
}