面试题61:按之字形顺序打印二叉树
2015-05-04 11:58
239 查看
题目:请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。例如:
8 --------0
6 10 --------1
5 7 9 11 --------0
打印结果为:
8
10 6
5 7 9 11
思路:设置两个栈,栈0和栈1
1.当行数标识为0的时候,将当前行的结点先将左子树入栈0,再将右子树入栈0,如8,先将6入栈,再将10入栈,栈0现在从顶往下是10 6,
2.然后判断栈0是否为空,不为空开始从顶打印,首先是10,因为10所在的行标识为1,所以将10的右子树先入栈1,再将左子树入栈1,栈1当前为9 11,然后10出栈
3.打印6,将6的右子树先压入栈1之后是左子树,6出栈,栈1当前为5 7 9 11
4.判断栈0是否为空,此时为空,然后将0设为1,开始对栈1进行判断,栈1保存结点的下一行设为0.
剑指offer代码:
8 --------0
6 10 --------1
5 7 9 11 --------0
打印结果为:
8
10 6
5 7 9 11
思路:设置两个栈,栈0和栈1
1.当行数标识为0的时候,将当前行的结点先将左子树入栈0,再将右子树入栈0,如8,先将6入栈,再将10入栈,栈0现在从顶往下是10 6,
2.然后判断栈0是否为空,不为空开始从顶打印,首先是10,因为10所在的行标识为1,所以将10的右子树先入栈1,再将左子树入栈1,栈1当前为9 11,然后10出栈
3.打印6,将6的右子树先压入栈1之后是左子树,6出栈,栈1当前为5 7 9 11
4.判断栈0是否为空,此时为空,然后将0设为1,开始对栈1进行判断,栈1保存结点的下一行设为0.
剑指offer代码:
void Print(BTNode * root) { if(root==NULL) return; stack<BTNode *> levels[2];//创建两个栈 int current=0;//当前行标识,初始化为0 int next=1;//下一行标识,初始化为1 levels[current].push(root); //如果两个栈有一个不为空 while(!levels[0].empty()||!levels[1].empty()) { BTNode * node=levels[current].top();//获取当前栈的栈顶结点 levels[current].pop();//栈顶结点出栈 if(current==0) { //先将左结点入栈,再将右结点入栈 if(node->left!=NULL) levels[next].push(node->left); if(node->right!=NULL) levels[next].push(node->right); } else { //先将右结点入栈,再将左结点入栈 if(node->right!=NULL) levels[next].push(node->right); if(node->left!=NULL) levels[next].push(node->left); } if(levels[current].empty()) { printf("\n"); current=1-current; next=1-next; } } }
相关文章推荐
- 剑指offer——面试题61:按之字形顺序打印二叉树
- 剑指offer——面试题61:按之字形顺序打印二叉树
- 面试题61. 按之字形顺序打印二叉树
- 剑指offer 面试题61 按之字形顺序打印二叉树
- (剑指Offer)面试题61:按之字形顺序打印二叉树
- 《剑指Offer》学习笔记--面试题61:按之字形顺序打印二叉树
- 剑指offer--面试题61:按之字形顺序打印二叉树
- 剑指offer面试题61 按之字形顺序打印二叉树(java实现)
- 【剑指Offer学习】【面试题61:按之字形顺序打印二叉树】
- 剑指offer-面试题61-按之字形顺序打印二叉树
- 面试题61:按之字形顺序打印二叉树
- 《剑指offer》Python语言 面试题61:按之字形顺序打印二叉树
- 剑指offer-面试题61:按之字形顺序打印二叉树
- 面试题61:按之字形顺序打印二叉树
- 【剑指Offer】面试题61:按之字形顺序打印二叉树
- 面试题61:按之字形顺序打印二叉树
- 面试题60 按之字形顺序打印二叉树
- 《剑指offer》:[61]按之字形顺序打印二叉树
- 61:按之字形顺序打印二叉树
- 剑指offer——面试题61:按之字形打印二叉树