剑指Offer——之字形打印二叉树
2016-05-25 14:44
363 查看
题目描述:实现一个函数按照之子形顺序打印二叉树。即第一行按照从左向右的顺序打印,第二层按照从右向左的顺序打印,第三行按照从左向右的顺序打印,其他以此类推。
分析:采用容器中的适配器stack,两个stack分别存储奇数行结点和偶数行结点。
如果当前打印的是奇数行(第一、三层等),则先保存左子结点,再保存右子结点。
如果当前打印的是偶数行(第二、四层等),则先保存右子结点,再保存左子节点。
void printree(BinaryTreeNode *pRoot)
{
if(pRoot==NULL)
return;
stack<BinaryTreeNode*> levels[2];
int cur=0;
int next=1;
levels[cur].push(pRoot);
while(!levels[0].empty() || !levels[1].empty())
{
BinaryTreeNode *pNode=pRoot;
pNode=levels[cur].top();
levels[cur].pop();
printf("%d ",pNode->m_nValue);
if(cur==0)//当前打印行为奇数数
{
if(pNode->m_nLeft!=NULL)
levels[next].push(pNode->m_nLeft);
if(pNode->m_nRight!=NULL)
levels[next].push(pNode->m_nRight);
}
else//当前打印行为偶数
{
if(pNode->m_nRight!=NULL)
levels[next].push(pNode->m_nRight);
if(pNode->m_nLeft!=NULL)
levels[next].push(pNode->m_nLeft);
}
if(levels[cur].empty())
{
printf("\n");
cur=1-cur;
next=1-next;
}
}
}
分析:采用容器中的适配器stack,两个stack分别存储奇数行结点和偶数行结点。
如果当前打印的是奇数行(第一、三层等),则先保存左子结点,再保存右子结点。
如果当前打印的是偶数行(第二、四层等),则先保存右子结点,再保存左子节点。
void printree(BinaryTreeNode *pRoot)
{
if(pRoot==NULL)
return;
stack<BinaryTreeNode*> levels[2];
int cur=0;
int next=1;
levels[cur].push(pRoot);
while(!levels[0].empty() || !levels[1].empty())
{
BinaryTreeNode *pNode=pRoot;
pNode=levels[cur].top();
levels[cur].pop();
printf("%d ",pNode->m_nValue);
if(cur==0)//当前打印行为奇数数
{
if(pNode->m_nLeft!=NULL)
levels[next].push(pNode->m_nLeft);
if(pNode->m_nRight!=NULL)
levels[next].push(pNode->m_nRight);
}
else//当前打印行为偶数
{
if(pNode->m_nRight!=NULL)
levels[next].push(pNode->m_nRight);
if(pNode->m_nLeft!=NULL)
levels[next].push(pNode->m_nLeft);
}
if(levels[cur].empty())
{
printf("\n");
cur=1-cur;
next=1-next;
}
}
}
相关文章推荐
- 边长、边数可配置的旋转多面体
- QT之QtWebKit与JavaScript交互(一)
- Nodejs学习笔记(二)
- jQuery为什么移除了.toggle()方法
- 有趣的js题目
- 对SharedPreferences的个人使用习惯
- Nodejs学习笔记(一)
- jade 渲染js片段
- JavaScript创造对象
- 钉钉微应用获取身份
- 详解表单验证正则表达式实例(推荐)
- node.js读取本地的文件
- 对css3动画事件的监听
- GCDAsyncSocket 支持IPv6 需要设置IPv4PreferredOverIPv6=NO
- Css学习总结(1)——20个很有用的CSS技巧
- Css学习总结(1)——20个很有用的CSS技巧
- Css学习总结(1)——20个很有用的CSS技巧
- G.Interference Signal---河南省第八届程序设计大赛(dp)
- [剑指offer]二叉搜索树的第k个结点
- nodejs的调试(node-inspector)