面试题61:请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
//按之字形顺序打印二叉树
void print(BinaryTreeNode* pRoot ){
printf("进入该方法");
if(pRoot==NULL)
return ;
std::stack<BinaryTreeNode*> levels[2];
int current=0;
int next=1;
(levels[current]).push(pRoot);
while(!(levels[current]).empty()||!(levels[next]).empty()){
BinaryTreeNode* pNode = (levels[current]).top();
printf("%d\t",pNode->m_nValue);
(levels[current]).pop();
if(next==1){
if(pNode->m_pLeft)
(levels[next]).push(pNode->m_pLeft);
if(pNode->m_pRight)
(levels[next]).push(pNode->m_pRight);
}else{
if(pNode->m_pRight)
(levels[next]).push(pNode->m_pRight);
if(pNode->m_pLeft)
(levels[next]).push(pNode->m_pLeft);
}
if((levels[current]).empty()){
printf("\n");
/*int temp=next;
next=current;
current=temp;*/
current=1-current;
next=1-next;
}
}
}
参考:《剑指offer》何海涛著