二叉树的遍历(C++、STL)
来源:互联网 发布:ajaxfileupload.js ie 编辑:程序博客网 时间:2024/06/05 05:14
之前没有使用C++的STL,写二叉树的遍历的时候基本都是选择用递归来实现,了解了C++标准模板库中的stack和queue后,发现遍历二叉树更加简单了,下面给出实例代码,通过实际验证发现这种方法很简洁,很方便
#include <vector>#include <iostream>#include <stack>#include <queue>using namespace std;struct BitNode{ int data; BitNode *left, *right; BitNode(int x) :data(x), left(0), right(0){}};
//创建二叉树函数,实际上安装先序遍历的方式来创建的,如果没有左(右)子数,则输入0void Create(BitNode *&root){ int key; cin >> key; if (key == 0) root = NULL; else { root = new BitNode(key); Create(root->left); Create(root->right); }}void PreOrderTraversal(BitNode *root){ if (root) { cout << root->data << " "; PreOrderTraversal(root->left); PreOrderTraversal(root->right); }}//深度优先搜索//利用栈,现将右子树压栈再将左子树压栈void DepthFirstSearch(BitNode *root){ stack<BitNode*> nodeStack; nodeStack.push(root); while (!nodeStack.empty()) { BitNode *node = nodeStack.top(); cout << node->data << ' '; nodeStack.pop(); if (node->right) { nodeStack.push(node->right); } if (node->left) { nodeStack.push(node->left); } }}//广度优先搜索void BreadthFirstSearch(BitNode *root){ queue<BitNode*> nodeQueue; nodeQueue.push(root); while (!nodeQueue.empty()) { BitNode *node = nodeQueue.front(); cout << node->data << ' '; nodeQueue.pop(); if (node->left) { nodeQueue.push(node->left); } if (node->right) { nodeQueue.push(node->right); } }}int main(){ BitNode *root = NULL; Create(root); //前序遍历 PreOrderTraversal(root); //深度优先遍历 cout << endl << "dfs" << endl; DepthFirstSearch(root); //广度优先搜索 cout << endl << "bfs" << endl; BreadthFirstSearch(root);}
阅读全文
0 0
- 二叉树的遍历(C++、STL)
- C语言实现二叉树的遍历
- 数据结构C语言二叉树的遍历
- [c++]基于数组的二叉树遍历
- C实现二叉树的各种遍历
- 数据结构-C:二叉树的遍历
- 二叉树的遍历(C++)版
- 【C++】 二叉树的基本知识及其遍历
- C语言 二叉树的遍历
- 链式二叉树的遍历C语言版
- 纯C创建二叉树及二叉树的遍历
- 用stl的中序遍历和层次遍历二叉树
- c 语言 二叉树遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 二叉树的遍历
- 前端实现只显示年月日
- 上海展讯repo下载代码
- 1028.人口普查(20)
- UE下smali语法高亮
- 关于hibernate的基础代码练习
- 二叉树的遍历(C++、STL)
- 重拾Java(5)-枚举
- math foundation for deep learning
- PAT 乙级 1018.锤子剪刀布(20)
- EXCEL排序
- istringstream 用法
- Android 实现自定义闹钟
- 如何在集群上安装zookeeper详解
- Redis指令操作二