博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
需要必知必会,倒背如流的经典算法和实现
阅读量:6845 次
发布时间:2019-06-26

本文共 3161 字,大约阅读时间需要 10 分钟。

二叉树的遍历算法(递归和迭代)

#include 
#include
using namespace std;template
class BinaryTree{public: BinaryTree(){} class TreeNode { public: TreeNode(){ visited = false;} TreeNode* left; TreeNode* right; T value; bool visited; }; void Insert(T t); void InorderTraverse(TreeNode * begin); void PreorderTraverse(TreeNode * begin); void PostorderTraverse(TreeNode * begin); void InorderTraverse2(); void PreorderTraverse2(); void PostorderTraverse2();private: TreeNode *root; void Insert(TreeNode* root, T t);};template
void BinaryTree
::InorderTraverse(TreeNode * begin){ if(NULL != begin->left) InorderTraverse(begin->left); cout<
value; if(NULL != begin->right) InorderTraverse(begin->right);}template
void BinaryTree
::PreorderTraverse( TreeNode * begin){ cout<
value; if(NULL != begin->left) PreorderTraverse(begin->left); if(NULL != begin->right) PreorderTraverse(begin->right);}template
void BinaryTree
::PostorderTraverse(TreeNode * begin){ cout<
value; if(NULL != begin->left) PostorderTraverse(begin->left); if(NULL != begin->right) PostorderTraverse(begin->right);}template
void BinaryTree
::InorderTraverse2(){ stack
treestack; treestack.push(root); TreeNode * tmpNode; while(!treestack.empty()) { tmpNode = treestack.top(); if(NULL == tmpNode->left || tmpNode->left->visited) { treestack.pop(); tmpNode->visited = true; cout<
value; if(NULL != tmpNode->right) { treestack.push(tmpNode->right); } } else if(!(tmpNode->left->visited)) { treestack.push(tmpNode->left); } } cout<
void BinaryTree
::PreorderTraverse2(){ stack
treestack; treestack.push(root); TreeNode * tmpNode; while(!treestack.empty()) { tmpNode = treestack.top(); treestack.pop(); cout<
value; if(NULL != tmpNode->right) treestack.push(tmpNode->right); if(NULL != tmpNode->left ) { treestack.push(tmpNode->left); } } cout<
void BinaryTree
::PostorderTraverse2(){}template
void BinaryTree
::Insert(T t){ if(NULL == root) { root = new TreeNode(); root->value = t; } else { Insert(root,t); }}template
void BinaryTree
::Insert(TreeNode *root, T t){ if(t >= root->value) { if(NULL != root->right) Insert(root->right, t); else { TreeNode *temp = new TreeNode(); temp->value = t; root->right = temp; } } else { if(NULL != root->left) Insert(root->left, t); else { TreeNode *temp = new TreeNode(); temp->value = t; root->left = temp; } }}int main(int argc, char **argv){ BinaryTree
*bitree = new BinaryTree
(); bitree->Insert(9); bitree->Insert(7); bitree->Insert(8); bitree->Insert(1); bitree->Insert(6); bitree->Insert(4); bitree->Insert(5); bitree->Insert(2); bitree->Insert(3); bitree->Insert(10); bitree->Insert(11); bitree->InorderTraverse2(); bitree->PreorderTraverse2();}

二叉查找

深度优选遍历

DFS需要对每个节点保存一个状态,而这个状态可能是3个值:White(没有发现的), Gray(被发现,正在遍历的), Black(以遍历完成的). 所以DFS需要一个数据空间去存储每个节点的状态。就用2386为例子实现一个吧

 

广度优先遍历

转载于:https://www.cnblogs.com/whyandinside/archive/2013/02/05/2893078.html

你可能感兴趣的文章
Spring校验@RequestParams和@PathVariables参数
查看>>
ES6箭头函数
查看>>
CentOS7网卡配置
查看>>
使用systemd来构建你的服务
查看>>
274. H-Index
查看>>
前嗅ForeSpider教程:同一个网站中从另一页面采集数据
查看>>
iterator_traits获取迭代器类型
查看>>
小程序页面之间的通讯利器 - nsevent
查看>>
JavaScript从初级往高级走系列————ES6
查看>>
Vue项目Webpack优化实践,构建效率提高50%
查看>>
mysql命令集
查看>>
学习Vue.js-Day3.1
查看>>
tradingview-websocket进阶
查看>>
Vue动态加载异步组件
查看>>
[面试专题]从for循环看let和var的区别
查看>>
有用的Guava(二)
查看>>
关于BEM的反思
查看>>
前端知识点总结
查看>>
[vscode]“收藏”那些经常访问的资源
查看>>
Django | admin 后台美化处理 JSONField
查看>>