二叉树遍历
来源:互联网 发布:外国人对淘宝的评价 编辑:程序博客网 时间:2024/06/06 04:59
//前序遍历:根节点->左子树->右子树//中序遍历:左子树->根节点->右子树//后序遍历:左子树->右子树->根节点//定义数据类型可以用泛型struct Data{ int hp;};//树的节点struct Node{ Data data; Node* left; Node* right; Node(int num):left(NULL),right(NULL) { data.hp = num; } Node(){ data.hp = num; }};class Tree{public: Tree():root(NULL),len(0){} ~Tree(){} Node* root; void addNode(int num); void qian(); void digui_qian(Node* node); void zhong(); void digui_zhong(Node* node); void hou(); void digui_hou(Node* node); void ceng();private: int len; vector<Node*> m_vec; };//创建void addNode(int num){ len++; int n = len; Noed* node = new Node(num); if(n == 1) { root = node; } else { n = n/2; if(len%2) { m_vec[n-1]->right = node; } else { m_vec[n-1]->left = node; } } m_vec.push_back(node);}//前序遍历:根节点->左子树->右子树//非递归void qian(){ Node* node = root; stack<Node*> sta; while(node || sta.size()) { if(node) { cout << node->data.hp << endl; if(node->right) sta.push(node->right) node = node->left; } else { node = sta.top(); sta.pop(); } }}//递归void digui_qian(Node* node){ if(node) { cout << node->date.hp <<endl; digui_qian(node->left); digui_qian(node->right); }}//中序遍历:左子树->根节点->右子树//非递归void zhong(){ Node* node = root; stack<Node*> sta; if(node || sta.size()) { if(node) { sta.push(node); node = node->left; } else { node = sta.top(); sta.pop(); cout << node->data.hp <<endl; node = node->right; } }}//递归void digui_zhong(Node* node){ if(node) { digui_zhong(node->left); cout << node->date.hp <<endl; digui_zhong(node->right); }}//后序遍历:左子树->右子树->根节点//非递归void hou(){ Node* node = root; Stack<Node*> sta; while(node || sta.size()) { if(node) { sta.push(node); node = node->left; } else { node = node->right; if(node) continue; node = sta.top(); sta.pop(); cout << node->data.hp << endl; while(sta.size() && sta.top()->right == node) { node = sta.top(); sta.pop(); cout << node->data.hp <<endl; } if(sta.size()) node = sta.top()->right; else return; } }}//后序遍历:左子树->右子树->根节点//递归void digui_hou(Node* node){ if(node) { digui_hou(node->left); digui_hou(node->right); cout << node->data.hp <<endl; }}//层序遍历又称广序遍历//利用单项队列的先进先出void ceng(){ Node*temp; queue<Node*> que; que.push (root); while(que.size()) { temp=que.front(); que.pop(); cout<<temp->data.hp<<endl; if( temp->left ) que.push( temp->left ); if ( temp->right ) que.push( temp->right ); }}
阅读全文
0 0
- 二叉树遍历、分层遍历
- 遍历二叉树--二叉树
- 【树】遍历二叉树
- 二叉树遍历
- 二叉树遍历
- 二叉树的遍历
- (原创)遍历二叉树
- 二叉树遍历-php
- 查找--遍历二叉树
- 遍历二叉树
- 二叉树遍历规则
- 二叉树的遍历
- 二叉树遍历
- 遍历二叉树
- 二叉树遍历问题
- 二叉树遍历
- 二叉树遍历(zz)
- 二叉树的遍历
- 332. Reconstruct Itinerary
- JavaWeb-News-文件上传
- 在 nginx 中部署 angular 应用
- 机器学习实战—笔记-kNN算法
- oracle 12c GI安装配置共享存储分区
- 二叉树遍历
- Mybatis的分页插件
- Python csv文件读取(表格文件)
- Android 6.0 权限简单介绍
- Freeswitch监听功能--单向监听
- 枚举运用
- 1065. 单身狗(25)
- 上机一 E ModricWang's QuickSort
- 拉格朗日乘数法——摘自高数下册P115