#include<iostream>
#include<cstring>
#include<stack>
using namespace std;
struct TreeNode
{
char data;
TreeNode *left,*right;
};
TreeNode * BT(char str1[],char str2[],int n)
{
int i;
TreeNode *root;
root = new TreeNode;
if(n==0)
root = NULL;
else
{
root -> data = str1[0];
for(i=0; i<n; i++)
if(str1[0]==str2[i])
break;
root->left = BT(str1+1,str2,i);
root->right = BT(str1+1+i,str2+i+1,n-i-1);
}
return root;
}
void Postrorder(TreeNode *root)
{
if(root)
{
stack<TreeNode *> S;
S.push(root);
TreeNode *temp;
while(!S.empty())
{
temp = S.top();
if(temp -> left)
S.push(temp -> left);
else if(temp -> right)
S.push(temp -> right);
else
{
S.pop();
cout<<temp->data;
if(!S.empty())
{
if(S.top() -> left == temp)
{
temp = S.top();
S.pop();
temp -> left = NULL;
S.push(temp);
}
else
{
temp = S.top();
S.pop();
temp -> right = NULL;
S.push(temp);
}
}
}
}
}
}
int main()
{
TreeNode *root;
char str1[111],str2[111];
cin>>str1>>str2;
int n = strlen(str1);
root = BT(str1,str2,n);
Postrorder(root);
cout<<endl;
return 0;
}
二叉树后序非递归遍历
最新推荐文章于 2022-07-28 19:33:45 发布