【剑指 offer】(二十三)—— 从上往下打印二叉树(或曰层次遍历、广度优先遍历)
2016-04-09 19:06
447 查看
从广度优先到深度优先,只差一个数据结构。
从上往下打印二叉树,实质是在考察树的遍历问题,显然不同于更为经典的先序、中序和后序遍历,而属于一种层次遍历,或曰广度优先遍历。
二叉树节点的定义如下:
从上往下打印二叉树,实质是在考察树的遍历问题,显然不同于更为经典的先序、中序和后序遍历,而属于一种层次遍历,或曰广度优先遍历。
二叉树节点的定义如下:
struct BinaryTreeNode { int val; BinaryTreeNode* lft; BinaryTreeNode* rgt; };
使用队列(FIFO)实现广度优先
#include <deque> void bfs(BinaryTreeNode* root) { if(!root) return; deque<BinaryTreeNode*> treeNodeDeque; treeNodeDeque.push_back(root); while (!treeNodeDeque.empty()) { BinaryTreeNode* node = treeNodeDeque.front(); treeNodeDeque.pop_front(); // .. 可对 node 指针做各种处理 if (node->lft) treeNodeDeque.push_back(node->lft); if (node->rgt) treeNodeDeque.push_back(node->rgt); } }
使用栈(FILO)实现深度优先
#include <stack> void dfs(BinaryTreeNode* root) { if (!root) return; stack<BinaryTreeNode*> treeNodeStack; treeNodeStack.push(root); while (!treeNodeStack.empty()) { BinaryTreeNode* node = treeNodeStack.top(); treeNodeStack.pop(); // ... 对 node 节点做各种处理 if (node->lft) treeNodeStack.push(node->lft); if (node->rgt) treeNodeStack.push(node->rgt); } }
相关文章推荐
- javascript原型
- 前端学习之利用Dreamweaver(3)
- json 解析
- HTML写的第一个邮箱登陆界面
- JNI中string 、 char* 和 jstring 两种转换
- 使用jquery.qrcode生成二维码
- 事件event对象
- js基础1
- HTML写的第一个邮箱登陆的界面
- DOM
- caffe的配置过程
- BOM
- Java NIO(1)----Channel 和 Buffer
- Chrome developer tool介绍(javascript调试)
- 点击链接更换图片和相应文本 childNotes nodeType nodeValue
- boost解析json文件
- Angularjs学习笔记6_table1
- PDOStatement 类 FETCH_* 系列
- js基本知识
- 【剑指offer系列】 二叉树中和为某一值的路径___25