关于二叉树的层次遍历的花样(c++实现)
来源:互联网 发布:备案的域名能改吗 编辑:程序博客网 时间:2024/04/28 14:25
花样变形1::二叉树层次遍历但是分层打印
分析:与普通打印多了一个分层打印,其实只要在在层次遍历中多设置一个标记变量即可
代码如下:
//二叉树的层次遍历void levelTravel(BTNode *bt){ if (bt == NULL) { return; } queue<BTNode *> nodeQueue; nodeQueue.push(bt); nodeQueue.push(NULL); //放入空节点,作为层的结束符 while (nodeQueue.size()) { BTNode *pNode = nodeQueue.front(); //取队首元素 nodeQueue.pop(); //必须出队列 if (pNode) //该节点非空 { cout << pNode->data << ' '; if (pNode->lchild) //左孩子 { nodeQueue.push(pNode->lchild); } if (pNode->rchild) //右孩子 { nodeQueue.push(pNode->rchild); } } //如果结点为空并且队列非空,则是一行访问结束,下一行的入队列结束,因此压入一个空指针 //若队列也是空,则说明已访问完毕 else if (nodeQueue.size()) { nodeQueue.push(NULL); cout << endl; } }}
可以看出我们通过设置了空节点来表示一层的结束,这样就可以很好的实现分层打印。
花样变形2:将二叉树分层打印的同时,将每层的数据保存下来
void levelTravel2(BTNode *bt){ vector<vector<int>> result; //存放所有层的节点 vector<int> cur; //存放每一层的节点 if (bt == NULL) { return; } queue<BTNode *> nodeQueue; nodeQueue.push(bt); nodeQueue.push(NULL); //放入空节点,作为层的结束符 while (nodeQueue.size()) { BTNode *pNode = nodeQueue.front(); //取队首元素 nodeQueue.pop(); //必须出队列 if (pNode) //该节点非空 { cout << pNode->data << ' '; cur.push_back(pNode->data); if (pNode->lchild) //左孩子 { nodeQueue.push(pNode->lchild); } if (pNode->rchild) //右孩子 { nodeQueue.push(pNode->rchild); } } //如果结点为空并且队列非空,则是一行访问结束,下一行的入队列结束,因此压入一个空指针 //若队列也是空,则说明已访问完毕 else { result.push_back(cur); cur.resize(0); if (nodeQueue.size()) nodeQueue.push(NULL); cout << endl; } } //for (int i = 0; i < result.size(); i++) //{ // vector<int>a = result[i]; // for (int j = 0; j < a.size(); j++) // { // //cout << a[j] << ' '; // printf("%c ", a[j]); // } // cout << endl; //}}
转载请注明出处:
CSDN:楼上小宇_home:http://blog.csdn.net/sty945
阅读全文
0 0
- 关于二叉树的层次遍历的花样(c++实现)
- 二叉树的层次遍历----java实现
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历!!!
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- firewall
- 第四次实验
- Springboot与Quartz用数据库管理集成遇到的坑!Service无法注入 null
- 浏览器缩放,会导致布局打乱,解决方法?/一缩小网页布局就打乱了怎么办?
- matlab求主副对角线元素
- 关于二叉树的层次遍历的花样(c++实现)
- 今天,帮技术圈伸张正义!
- 漏洞检测~SQL注入
- Android Studio集成lua插件
- Hdoj 1032 The 3n+1 problem (看题目很重要)
- java中的枚举
- 【软工文档】感受
- Android之drawlayout使用和总结
- hibernate中关于SessionFactory对象中opensession()和getCurrentSession()的区别