【算法题】分层遍历二叉树
来源:互联网 发布:php程序员开发软件 编辑:程序博客网 时间:2024/06/06 11:48
- 使用双队列方式:一个队列表示当前层,一个队列表示下一层,
换层时交换指向两队列的指针
#include <iostream>#include <numeric>#include<algorithm>#include <queue>using namespace std;struct Tree{ double value; Tree* left; Tree* right;};void Print(Tree* root){ if (root == NULL) return; queue<Tree*> queue_current; queue<Tree*> queue_next; auto * p_current = &queue_current; auto * p_next = &queue_next; Tree* p = root; p_next->push(p); while (!(*p_next).empty()) { std::swap(p_current, p_next); while (!(*p_current).empty()) { p = p_current->front(); p_current->pop(); cout << p->value << " "; if (p->left != NULL) { p_next->push(p->left); } if (p->right != NULL) { p_next->push(p->right); } } cout << endl; }}int main(){ Tree root; Tree node1_1; Tree node1_2; Tree node2_1; Tree node2_2; Tree node2_3; Tree node3_1; Tree node3_2; Tree node3_3; Tree node3_4; root.value = 0; node1_1.value = 1.1; node1_2.value = 1.2; node2_1.value = 2.1; node2_2.value = 2.2; node2_3.value = 2.3; node3_1.value = 3.1; node3_2.value = 3.2; node3_3.value = 3.3; node3_4.value = 3.4; root.left = &node1_1; root.right = &node1_2; node1_1.left = &node2_1; node1_1.right = &node2_2; node1_2.left = &node2_3; node1_2.right = NULL; node2_1.left = &node3_1; node2_1.right = &node3_2; node2_2.left = NULL; node2_2.right = NULL; node2_3.left = &node3_3; node2_3.right = &node3_4; node3_1.left = NULL; node3_1.right = NULL; node3_2.left = NULL; node3_2.right = NULL; node3_3.left = NULL; node3_3.right = NULL; node3_4.left = NULL; node3_4.right = NULL; Print(&root); return 0;}
- 使用单队列
每一层,使用一个变量记录该层的结点个数,也就是队列的当前长度,然后依次在队列中访问该层的结点(将队列中len个元素出队列),并将下一层加入队列。
void Print(Tree* pRoot){ queue<Tree*> q; if (!pRoot) return; q.push(pRoot); while (!q.empty()) { int len = q.size(); while (len--) { Tree* tem = q.front(); q.pop(); cout << tem->value << " "; if (tem->left) q.push(tem->left); if (tem->right) q.push(tem->right); } cout << endl; }}
阅读全文
0 0
- 【算法题】分层遍历二叉树
- 分层遍历二叉树
- 分层遍历二叉树
- 分层遍历二叉树
- 分层遍历二叉树
- 分层遍历二叉树
- 分层遍历二叉树
- 分层遍历二叉树
- 分层遍历二叉树
- 分层遍历二叉树
- 分层遍历二叉树
- 分层遍历二叉树
- 分层遍历二叉树
- 分层遍历二叉树
- 分层遍历二叉树
- 分层遍历二叉树
- 分层遍历二叉树
- 二叉树遍历、分层遍历
- Androidd多媒体开发基础
- 前端:Get 和 Post的区别
- SpringMVC中使用Interceptor拦截器
- SpringIOC概述
- Mac 图标大小 LaunchPad 图标大小
- 【算法题】分层遍历二叉树
- Android中使用opencv
- Mysql主从复制配置
- 租船管理系统
- Android常用控件(选择器)
- 数据结构:堆
- 七、顺序队列
- 链家面试 全排列
- expdp导出问题亲身体验!