C++之树的层序遍历和深度优先遍历(先序遍历)(14)---《那些奇怪的算法》
2017-10-20 10:10
495 查看
仿照图的dfs和bfs遍历,我们设计了二叉树的dfs(先序遍历)和bfs遍历,代码如下:
运行结果:
#include <iostream> #include <string> #include <stack> #include <queue> using namespace std; typedef struct QNode{ struct QNode* left; struct QNode* right; int data; QNode(int data, QNode* left=NULL, QNode* right=NULL){ this->data = data; this->left = left; this->right = right; } }; void dfs(QNode* root){ if (root != NULL) cout << root->data << endl; else return; if (root->left) dfs(root->left); if (root->right) dfs(root->right); } void dfs_iter(QNode* root){ stack<QNode*> sta; sta.push(root); QNode* temp = NULL; while (!sta.empty()){ temp = sta.top(); sta.pop(); if (temp) cout << temp->data << endl; if (temp->right) sta.push(temp->right); if (temp->left) sta.push(temp->left); } } void bfs_iter(QNode* root){ queue<QNode*> que; que.push(root); QNode* temp = NULL; while (!que.empty()){ temp = que.front(); que.pop(); if (temp != NULL) cout << temp->data << endl; if (temp->left) que.push(temp->left); if (temp->right) que.push(temp->right); } } int main(){ QNode root(1); QNode l1_left(2); QNode l1_right(3); QNode l12_left(4); QNode l12_right(5); QNode l21_left(6); QNode l22_right(7); root.left = &l1_left; root.right = &l1_right; l1_left.left = &l12_left; l1_left.right = &l12_right; l1_right.left = &l21_left; l1_right.right = &l22_right; dfs_iter(&root); cout << endl; bfs_iter(&root); return 0; return 0; }
运行结果:
相关文章推荐
- C++之根据组合遍历顺序生成二叉树(25)---《那些奇怪的算法》
- C++之根据组合遍历顺序生成二叉树(25)---《那些奇怪的算法》
- C++之求取vector中三个元素和和给定元素最接近的值(15)---《那些奇怪的算法》
- C++之给定向量中4个元素的和等于给定值得向量和(16)---《那些奇怪的算法》
- C++之求解二叉树中所有从根节点到叶节点的所有路径(23)---《那些奇怪的算法》
- C++实现二叉树的镜像操作(18)---《那些奇怪的算法》
- C++之实现两个链表合并(迭代和递归版本)(19)---《那些奇怪的算法》
- C++之平衡二叉树的判定(25)---《那些奇怪的算法》
- C++之数字容器装水问题(10)---《那些奇怪的算法》
- C++之堆的实现(5)---《那些奇怪的算法》
- C++之最长公共子序列(21)---《那些奇怪的算法》
- C++之归并排序(7)---《那些奇怪的算法》
- C++之实现大顶堆(1)---《那些奇怪的算法》
- C++实现两个有序链表合并(17)---《那些奇怪的算法》
- C++之整数转化为罗马数字(11)---《那些奇怪的算法》
- C++之字符串的zipzag排列(9)---《那些奇怪的算法》
- C++之最长公共子串(最长子数组和)(22)---《那些奇怪的算法》
- C++之最长回文字符串的判断(8)---《那些奇怪的算法》
- C++之罗马数字转换为整型数字(12)---《那些奇怪的算法》
- C++之快速排序(3)---《那些奇怪的算法》