二叉树四种遍历(非递归)
来源:互联网 发布:ie修复软件 编辑:程序博客网 时间:2024/05/16 07:20
#include<iostream>#include<vector>using namespace std;struct Node{char val;Node *left;Node *right;};struct cheryl{Node *n;char tag;};typedef Node* node;node insert(Node *root,char ch);vector<char> cenxu(Node *root);vector<char> zhongxu(Node *root);vector<char> qianxu(Node *root);vector<char> houxu(Node *root);int main(void){node root=nullptr;char a[6]={'A','B','D','C','F','E'};for(int i=0;i<6;++i)root=insert(root,a[i]);cout<<"层序遍历"<<endl;vector<char> temp=cenxu(root);for(auto i:temp)cout<<i<<' ';cout<<endl;cout<<"中序遍历"<<endl;temp=zhongxu(root);for(auto i:temp)cout<<i<<' ';cout<<endl;cout<<"前序遍历"<<endl;temp=qianxu(root);for(auto i:temp)cout<<i<<' ';cout<<endl;cout<<"后序遍历"<<endl;temp=houxu(root);for(auto i:temp)cout<<i<<' ';cout<<endl;return 0;}node insert(Node *root,char ch){if(!root){root=new Node;root->left=nullptr;root->right=nullptr;root->val=ch;}else if(ch<root->val)root->left=insert(root->left,ch);else if(ch>root->val)root->right=insert(root->right,ch);return root;}vector<char> cenxu(Node *root){vector<char> result;if(!root)return result;vector<Node*> temp;temp.push_back(root);int curr=0;int last=1;while(curr<temp.size()){last=temp.size();while(curr<last){result.push_back(temp[curr]->val);if(temp[curr]->left)temp.push_back(temp[curr]->left);if(temp[curr]->right)temp.push_back(temp[curr]->right);++curr;}}return result;}vector<char> zhongxu(Node *root){vector<char> result;if(!root)return result;vector<Node*> temp;Node *p=root;while(p||!temp.empty()){if(p){temp.push_back(p);p=p->left;}else{p=temp.back();temp.pop_back();result.push_back(p->val);p=p->right;}}return result;}vector<char> qianxu(Node *root){vector<char> result;if(!root)return result;vector<Node*> temp;Node *p=root;while(p||!temp.empty()){if(p){result.push_back(p->val);temp.push_back(p);p=p->left;}else{p=temp.back()->right;temp.pop_back();}}return result;}vector<char> houxu(Node *root){vector<char> result;if(!root)return result;vector<cheryl*> temp;Node *p=root;cheryl *c;while(p||!temp.empty()){while(p){c=new cheryl;c->n=p;c->tag='N';temp.push_back(c);p=p->left;}while(!temp.empty()&&temp.back()->tag=='R'){c=temp.back();result.push_back((c->n)->val);temp.pop_back();}if(!temp.empty()){c=temp.back();c->tag='R';p=c->n->right;}}return result;}
0 0
- 二叉树四种遍历(非递归)
- 二叉树遍历(递归,非递归)
- 二叉树中序遍历(递归+非递归)
- 二叉树遍历(递归、非递归、Morris遍历)
- 二叉树遍历(递归、非递归、Morris遍历)
- 二叉树的遍历(递归+非递归+层次遍历)
- 二叉树遍历(非递归)
- 二叉树的遍历(非递归)
- 二叉树遍历(非递归版)
- 二叉树遍历(非递归算法)
- 二叉树遍历(前中后层序/非递归)
- 二叉树遍历算法(非递归)
- 二叉树的遍历(非递归)
- 二叉树的遍历(非递归)
- 二叉树遍历(前中后层序/非递归)
- 遍历二叉树(非递归)
- 二叉树遍历(非递归)
- 二叉树遍历(非递归版)
- 胸有成竹的面试好口才,必读五大秘诀
- FragmentTabHost] File is Out of sync
- 虚拟机Bridge、NAT、host-only三种网络模式
- SAP Basis日常工作
- unity3d中的http通信 http 提交数据原理
- 二叉树四种遍历(非递归)
- IOS开发语言Swift入门连载---闭包
- Linux下获取binary中的rpath信息
- AWR阅读
- TCP和UDP的区别
- hdu 2159 FATE 二维背包
- Web service是什么?
- android 4.0 禁用系统home键!亲测可用!
- zendstudio配置大全