本题源自剑指offer
----------------------------------------------------------------
用俩个栈,当前打印层为奇数层时,就先让左子节点进栈再进右子节点;若当前打印层为偶数,则先让右子节点进栈再进左子节点
vector<vector<int> > Print(TreeNode* pRoot) {
vector<vector<int> > result;
vector<int> levelResult;
if(pRoot==NULL)
return result;
stack<TreeNode* > level[2];
int current=0;
int next=1;
int i=0;
level[current].push(pRoot);
while(!level[0].empty() || !level[1].empty()){
TreeNode* pNode=level[current].top();
level[current].pop();
levelResult.push_back(pNode->val);
if(current==0){
//当前打印奇数层 先左子树进栈
if(pNode->left!=NULL){
level[next].push(pNode->left);
}
if(pNode->right!=NULL){
level[next].push(pNode->right);
}
}else{
//当前打印偶数层,先进右子节点
if(pNode->right!=NULL){
level[next].push(pNode->right);
}
if(pNode->left!=NULL){
level[next].push(pNode->left);
}
}
if(level[current].empty()){
result.push_back(levelResult);
levelResult.clear();
current=1-current;
next=1-next;
}
}
return result;
}