数据结构-二叉树的深度优先和广度优先遍历
来源:互联网 发布:delphi数据库编程实例 编辑:程序博客网 时间:2024/06/13 08:47
1.基本概念
DFS深度优先遍历:沿着树的深度遍历树的节点,先访问根结点,然后是左子树,右子树
BFS广度优先遍历:横向遍历,沿着树的宽度,先访问根结点,然后左右子节点。然后是上述左右子节点的子节点,一层一层往下。
以下图为例:
DFS的结果为【ABDECFG】
BFS的结果为【ABCDEFG】
2.递归实现
void DFS(TreeNode* root, vector<int>& ans) { if (root == NULL) return; ans.push_back(root->val); DFS(root->left, ans); DFS(root->right, ans);}
3.非递归实现
DFS使用stack,先进后出,先入栈的节点后访问
void DFS(TreeNode* root, vector<int>& values) { if (root == NULL) return; stack<TreeNode*> nodes; nodes.push(root); while (!nodes.empty()) { root = nodes.top(); nodes.pop(); values.push_back(root->val); if(root->right) nodes.push(root->right); if(root->left) nodes.push(root->left); }}
BFS使用queue,先进先出,先入队列的节点先访问
void BFS(TreeNode* root, vector<int> values) { if (root == NULL) return; queue<TreeNode*> nodes; nodes.push(root); while (!nodes.empty()) { root = nodes.front(); nodes.pop(); values.push_back(root->val); if(root->left) nodes.push(root->left); if(root->right) nodes.push(root->right); }}
前序、中序、后序遍历的递归与非递归实现–博文链接
阅读全文
0 0
- 数据结构-二叉树的深度优先和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的广度优先遍历和深度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- 二叉树的深度优先遍历和广度优先遍历
- AVL平衡树
- action属性
- wireshark如何抓取本机包
- NAPI 之(三)——技术在 Linux 网络驱动上的应用和完善
- 忘记sys、system 密码
- 数据结构-二叉树的深度优先和广度优先遍历
- 详解Windows下安装Nodejs步骤
- php中&&和||的用法
- 程序员那些事儿--------1
- groovy的集合 Map
- 通讯录小项目
- Makefile大综合基础知识
- react和react-native样式区别
- android中像素单位dp、px、pt、sp的比较