树的打印方式
来源:互联网 发布:c一维数组排序算法 编辑:程序博客网 时间:2024/06/10 10:19
///////////////////////////////////////////////////////////////////////////////////////////////////////Z行打印二叉树 5 / \ 1 8 /\ /\ 0 2 7 9 \ 4输出格式为 : 5 8 1 0 2 7 9 4void Z_Print_Tree(Tree *root){ if(root == NULL) { return ; } stack<Tree*> sta[2]; //两个栈 sta[0]是放 奇数层的 数字 sta[1] 放偶数层的数字 sta[0].push(root); int ceng = 1;//当前打印的层数 while(!sta[0].empty() || !sta[1].empty()) { Tree *temp = NULL; if(ceng % 2 != 0) //奇数层 { temp = sta[0].top(); //弹出一个元素 sta[0].pop(); cout<<temp->nValue<<" "; if(temp->pLeft != NULL) { sta[1].push(temp->pLeft); //下一层 为 偶数层 要放到 第二个栈 中 } if(temp->pRight != NULL) { sta[1].push(temp->pRight); //下一层 为 偶数层 要放到 第二个栈 中 } } else { temp = sta[1].top(); sta[1].pop(); cout<<temp->nValue<<" "; if(temp->pRight != NULL) { sta[0].push(temp->pRight); } if(temp->pLeft != NULL) { sta[0].push(temp->pLeft); } } if(ceng % 2 != 0) //只有 当前的 层数 打印完 层数 ceng 才会 ++ { if(sta[0].empty()) //奇数层 看 sta[0] 栈 是否 打印完 ,栈 为 空 才会 ceng++ { cout<<endl; ceng++; } } if(ceng % 2 == 0) { if(sta[1].empty()) { cout<<endl; ceng++; } } }}/////////////////////////////////////////////////////////////////////////////////////////////////////把二叉树打印成多行 5 / \ 1 8 /\ /\ 0 2 7 9 \ 4输出格式为 : 5 1 8 0 2 7 9 4void Ceng_Print(Tree *root){ int Next_Node_Sum = 0;//下一层结点的个数 int To_Be_Print_Sum = 1;//当前层需要打印结点的个数 queue<Tree*> que; que.push(root); while(!que.empty()) { Tree *temp = que.front(); que.pop(); cout<<temp->nValue<<" "; To_Be_Print_Sum--; if(temp->pLeft != NULL) { que.push(temp->pLeft); Next_Node_Sum++; } if(temp->pRight != NULL) { que.push(temp->pRight); Next_Node_Sum++; } if(To_Be_Print_Sum == 0) { cout<<endl; To_Be_Print_Sum = Next_Node_Sum; Next_Node_Sum = 0; } }}/////////////////////////////////////////////////////////////////////////////////////////////////////打印树的第k层结点//打印第k层结点顺序的打印 5 / \ 1 8 /\ /\ 0 2 7 9 \ 4输出格式为 : 第0层 5 第2层 0 2 7 9void PrintKCeng(Tree *root,int k){ if(root == NULL) { return; } if(k == 0) { cout<<root->nValue<<" "; return; } if(root->pLeft != NULL) { PrintKCeng(root->pLeft,k-1); } if(root->pRight != NULL) { PrintKCeng(root->pRight,k-1); }}///////////////////////////////////////////////////////////////////////////////////////////////////// 5 / \ 1 8 /\ /\ 0 2 7 9 \ 4输出格式为 : 4 9 7 2 0 8 1 5void ReversePrintCeng(Tree *root,stack<vector<int> > &sta/*因为当前需要从树的叶子节点输出,所以用栈*/){ if(root == NULL) { return ; } vector<int>vec; //储层当前层数的节点 queue<Tree*> que; //通过层遍历 树的 队列 que.push(root); int To_Be_Print = 1; //当前层需要打印 的 个数 int Next_Ceng_Sum = 0; //下一层 需要 打印 的 个数 while(!que.empty()) // 栈不为空 { Tree *temp = que.front(); que.pop(); vec.push_back(temp->nValue); To_Be_Print--; // 需要打印的 个数 -- if(temp->pRight != NULL) //因为 当前 需要 从 每一层 的 右边 开始 存入节点 { que.push(temp->pRight); // 所以 需要 先判断 右边 是否 有节点 Next_Ceng_Sum++; // 下一层数 的 结点 个数 ++ } if(temp->pLeft != NULL) { que.push(temp->pLeft); Next_Ceng_Sum++; } if(To_Be_Print == 0) //如果 当前层数 需要打印的 结点 个数 没有 了 0 个 { sta.push(vec); // 将当前 层数 的节点 放到 栈中 To_Be_Print = Next_Ceng_Sum; //更改 需要打印结点的 个数 Next_Ceng_Sum = 0; //重新 置 0 vec.clear(); //vector 清空 } }}
1 0
- 树的打印方式
- Web方式的打印
- 打印的3种方式
- JS实现打印的方式
- poi打印模版的方式打印到Excel中
- 一种别样的打印Log的方式
- 实现打印的几种方式
- 如何在Opencore的log打印方式
- iOS打印Debug日志的方式
- Android中日志信息的打印方式
- C#打印条码的几种方式
- C#打印条码的几种方式
- iOS打印Debug日志的方式
- 剑指offer17--旋转的方式打印矩阵
- 剑指offer18--旋转的方式打印矩阵
- java 打印日志的几种方式
- iOS打印Debug日志的方式
- C#打印条码的几种方式
- DotNet中StringBuilder和String的区别
- 数据结构实现之索引优先队列用例(多路归并)
- Ceph安装
- HDOJ 2041 超级楼梯
- 使用struts2+spring+hibernate测试多对多关系映射的时候出现懒加载问题:could not initialize proxy - no Session
- 树的打印方式
- mybatis+log4j 打印sql
- LCA树两个节点最低公共祖先
- Activity与Service的交互一
- Partial Class verse Partial Method
- (模拟) uva 1589 Xiangqi
- linux macro time_after学习
- floyd判圈算法 (UVA 11549 - Calculator Conundrum)
- 二叉搜索树的后序遍历序列序列判断是否是二叉搜索树