二叉树的三种遍历六种实现
来源:互联网 发布:网络汽车出租管理办法 编辑:程序博客网 时间:2024/05/23 12:00
#include <iostream> #include <stack>using namespace std;struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};/** TreeNode* init_node(int value);*/ TreeNode* init_node(){ TreeNode* r0 = new TreeNode(0); TreeNode* r1 = new TreeNode(1); TreeNode* r2 = new TreeNode(2); TreeNode* r3 = new TreeNode(3); TreeNode* r4 = new TreeNode(4); TreeNode* r5 = new TreeNode(5); TreeNode* r6 = new TreeNode(6); r0->left = r1;r0->right = r2; r1->left = r3;r1->right = r4; r2->left = r5;r2->right = r6; r3->left=r3->right=r4->left=r4->right=r5->left=r5->right=r6->left=r6->right=NULL; return r0;}//前序遍历-递归实现 void pre_order0(TreeNode* root){ if(root == NULL) return; cout<<root->val<<'\t'; pre_order0( root->left); pre_order0( root->right);} //前序遍历-非递归实现 void pre_order(TreeNode* root){ if(root == NULL) return; stack<TreeNode*> nodes; TreeNode* tmp = root; while(tmp != NULL){ cout<< tmp->val<<'\t'; if(tmp->right) nodes.push(tmp->right); if(tmp->left) nodes.push(tmp->left); if(nodes.empty()) break; tmp = nodes.top(); nodes.pop(); }} //中序遍历-递归实现 void in_order(TreeNode* root){ if(root == NULL) return; in_order( root->left); cout<<root->val<<'\t'; in_order(root->right);} //中序遍历-非递归实现void in_order_0(TreeNode* root){ stack<TreeNode*> nodes; TreeNode* tmp = root; while(!nodes.empty() || tmp){ if(tmp){ nodes.push(tmp); tmp = tmp->left; }else{ tmp = nodes.top(); cout<<tmp->val<<'\t'; nodes.pop(); tmp = tmp->right; } }}//后序遍历-递归实现void post_order(TreeNode* root){ if(root == NULL) return; post_order(root->left); post_order(root->right); cout<<root->val<<'\t';} //后序遍历-非递归实现void post_order0(TreeNode* root){ stack<TreeNode*> s; TreeNode* h = root; if(root == NULL) return; s.push(root); while(!s.empty()){ TreeNode* cur = s.top(); if(cur->left != NULL && h != cur->left && h != cur->right) s.push(cur->left); else if(cur->right != NULL && h != cur->right){ s.push(cur->right); }else{ cout<<cur->val<<'\t'; s.pop(); h = cur; } }}int main(){ TreeNode* root = init_node(); in_order_0(root); return 0;}
0 0
- 二叉树的三种遍历六种实现
- 再谈二叉树:三种遍历六种实现
- 二叉树的三种遍历的非递归实现
- 二叉树的三种遍历的非递归实现
- 二叉树的建立删除及三种遍历实现
- 三种二叉树遍历的非递归实现
- 二叉树的建立删除及三种遍历实现
- java实现二叉树的三种遍历算法(递归)
- 二叉树的三种递归遍历实现
- 二叉树的三种遍历方式java实现
- 递归实现二叉树的三种遍历
- 递归实现二叉树的三种遍历
- 遍历二叉树的三种情况-java实现
- 用C++实现二叉树的三种遍历方式
- 用Java实现二叉树的三种遍历方式
- java实现二叉树的三种遍历算法(递归)
- 二叉树的三种遍历非递归实现
- 二叉树的三种遍历方式java实现
- JS获取当前时间戳的方法
- STL容器及常用算法
- SDUT1524回文串判定(栈)
- web两个iframe之间互相调用方法
- 微信生成带参数的二维码
- 二叉树的三种遍历六种实现
- recyclerview仿qq滑动删除
- 表单事件
- Java开发环境配置(JDK+Tomcat+MyEclipsed)
- Firefox 的使用
- ALSA音频概念介绍 ---绝对权威
- 传入Map返回实体
- JDBC连接数据库模板
- 翻转字符串顺序