基于栈的非递归方法实现二叉树
来源:互联网 发布:主流数据库 对比 编辑:程序博客网 时间:2024/05/18 01:01
#include<iostream>#include<vector>#include<stdlib.h>using namespace std;struct BiNode{ char data; struct BiNode *left; struct BiNode *right;};typedef struct BiNode Node;typedef Node* LinkNode;//以先序的顺序编写结点LinkNode CreatTree(LinkNode T){ char temp; cin>> temp; if('0' == temp) { T = NULL; } else { T = (LinkNode)malloc(sizeof(Node)); T->data = temp; T->left = CreatTree(T->left); T->right = CreatTree(T->right); } return T;}//非递归前序void PreOrder(LinkNode T){ if(T == NULL) { return; } vector<LinkNode> s; LinkNode p = T; while(p != NULL || !s.empty()) { while(p != NULL) { cout<<p->data; s.push_back(p); p = p ->left; } if(!s.empty()) { p = s[s.size()-1]; s.pop_back(); p = p->right; } }}void InOrder(LinkNode T){ if(NULL == T) { return; } vector<LinkNode> s; LinkNode p = T; while(p != NULL || !s.empty()) { while(p != NULL) { s.push_back(p); p = p->left; } if(!s.empty()) { p= s[s.size()-1]; cout<<p->data; s.pop_back(); p = p->right; } }}/*具体思路:栈S1 和S2 。首先根节点入栈S1,当S1不为空弹出栈顶元素,并入栈S2,如果说弹出的左右子树不为空,则依次将其左子树和右子树入栈。直到栈S1空时停止。/i/*/void PostOrder(LinkNode T){ if(NULL == T) { return; } vector<LinkNode> s1,s2; LinkNode p = T; s1.push_back(T); while(!s1.empty()) { p = s1[s1.size()-1]; s1.pop_back(); s2.push_back(p); if(p->left != NULL) { s1.push_back(p->left); } if(p->right != NULL) { s1.push_back(p->right); } } while(!s2.empty()) { p = s2[s2.size()-1]; cout<<p->data; s2.pop_back(); }}int main(){ Node *Tree; Tree = CreatTree(Tree); cout<<"前序序列:"<<endl; PreOrder(Tree); cout<<endl; cout<<"中序序列:"<<endl; InOrder(Tree); cout<<endl; cout<<"后序序列:"<<endl; PostOrder(Tree); cout<<endl;}
运行结果
阅读全文
0 0
- 基于栈的非递归方法实现二叉树
- 二叉树的先序遍历非递归实现方法
- 二叉树遍历的非递归实现方法
- 基于计数栈的非递归二叉树遍历算法
- 二叉树三种遍历方法的递归与非递归实现
- 二叉树的非递归遍历方法
- 非递归的方法遍历二叉树
- 非递归遍历二叉树的方法
- 二叉树的非递归遍历方法
- 二叉树的非递归的实现
- 非递归实现二叉树的遍历
- 非递归实现二叉树的遍历
- 二叉树的非递归实现
- 二叉树的非递归实现
- 二叉树遍历的非递归实现
- 二叉树遍历的非递归实现
- 二叉树遍历的非递归实现
- 二叉树的非递归遍历实现
- Akka并发编程——第六节:Actor模型(五)
- 索引
- linux下安装tomcat
- Python 了解 类中方法的方式
- 自主编程实现选择,冒泡,快速,归并,希尔排序
- 基于栈的非递归方法实现二叉树
- 《具身认知》
- synchronized锁优化
- jdk动态代理生成代理对象源码分析-4
- PV操作(原语)及相关概念以及常见疑问
- 关于unity中Network组件的简单应用
- 4-12固定定位的用途顶部导航栏
- 合并两个有序的链表使新链表依然有序(不开辟新空间,在原链表上操作。 递归版本)
- JdkDynamicAopProxy-invoke方法-5