#include<iostream>
#include<stack>
using namespace std;
class TreeNode{
public:
TreeNode(char val):val(val),left(nullptr),right(nullptr){}
char val;
TreeNode* left,*right;
};
void preOrder(TreeNode* root){
if(!root)return;
stack<TreeNode*>st;
st.push(root);
while(!st.empty()){
auto tmp=st.top();
st.pop();
cout<<tmp->val<<",";
auto l=tmp->left,r=tmp->right;
if(r)st.push(r);
if(l)st.push(l);
}
}
void backOrder(TreeNode* root){
if(!root)return;
stack<TreeNode*>st;
TreeNode* pre=nullptr,*p=root;
while(p!=nullptr || !st.empty()){
while(p && p!=pre){
st.push(p);
p=p->left;
}
if(st.empty())return;
auto tmp=st.top();
//st.pop();
if(tmp->right && tmp->right!=pre){
p=tmp->right;
}else {
cout<<tmp->val<<",";
pre=tmp;
st.pop();
}
}
}
void midOrder(TreeNode* root){
if(!root)return;
stack<TreeNode*>st;
auto p=root;
while(p || !st.empty()){
while(p){
st.push(p);
p=p->left;
}
auto tmp=st.top();
st.pop();
cout<<tmp->val<<",";
p=tmp->right;
}
}
void pre(TreeNode* root){
if(!root)return;
cout<<root->val<<",";
pre(root->left);
pre(root->right);
}
int main(){
TreeNode A('A');
TreeNode B('B');
TreeNode C('C');
TreeNode D('D');
TreeNode E('E');
TreeNode F('F');
TreeNode G('G');
F.right=&G;
C.left=&E;C.right=&F;
B.right=&D;
A.left=&B;A.right=&C;
TreeNode* p=&A;
cout<<"pre:"<<endl;
preOrder(p);
cout<<endl;
cout<<"mid:"<<endl;
midOrder(p);
cout<<endl;
cout<<"back:"<<endl;
backOrder(p);
cout<<endl;
}
二叉树那些非递归遍历
最新推荐文章于 2018-11-16 20:33:45 发布