struct TreeNode
{
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x):val(x),left(NULL),right(NULL){}
void preorder_print1(TreeNode* root) //非递归调用 前序
{
if(!root) return ;
stack<TreeNode*> temp;
while(root || !temp.empty())
{
if(root)
{
cout<<root->val<<" ";
temp.push(root);
root=root->left;
}else
{
TreeNode* node=temp.top();
temp.pop();
root=node->right;
}
}
cout<<endl;
}
void zhongxu_print1(TreeNode* root) // 非递归调用 中序
{
if(!root) return ;
stack<TreeNode*> temp;
while(root || !temp.empty())
{
while(root)
{
temp.push(root);
root=root->left;
}
TreeNode* node=temp.top();
cout<<node->val<<" ";
temp.pop();
root=node->right;
}
cout<<endl;
}
void houxu_print1(TreeNode* root) // 非递归调用 后序
{
if(!root) return ;
stack<TreeNode*> temp;
TreeNode* pre;
temp.push(root);
while(!temp.empty())
{
TreeNode* curr=temp.top();
if((!curr->left && !curr->right) || (pre && (curr->left==pre || curr->right==pre)))
{
cout<<curr->val<<" ";
temp.pop();
pre=curr;
}else
{
if(curr->right)
{
temp.push(curr->right);
}
if(curr->left)
{
temp.push(curr->left);
}
}
}
cout<<endl;
}
{
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x):val(x),left(NULL),right(NULL){}
};
{
if(!root) return ;
stack<TreeNode*> temp;
while(root || !temp.empty())
{
if(root)
{
cout<<root->val<<" ";
temp.push(root);
root=root->left;
}else
{
TreeNode* node=temp.top();
temp.pop();
root=node->right;
}
}
cout<<endl;
}
void zhongxu_print1(TreeNode* root) // 非递归调用 中序
{
if(!root) return ;
stack<TreeNode*> temp;
while(root || !temp.empty())
{
while(root)
{
temp.push(root);
root=root->left;
}
TreeNode* node=temp.top();
cout<<node->val<<" ";
temp.pop();
root=node->right;
}
cout<<endl;
}
void houxu_print1(TreeNode* root) // 非递归调用 后序
{
if(!root) return ;
stack<TreeNode*> temp;
TreeNode* pre;
temp.push(root);
while(!temp.empty())
{
TreeNode* curr=temp.top();
if((!curr->left && !curr->right) || (pre && (curr->left==pre || curr->right==pre)))
{
cout<<curr->val<<" ";
temp.pop();
pre=curr;
}else
{
if(curr->right)
{
temp.push(curr->right);
}
if(curr->left)
{
temp.push(curr->left);
}
}
}
cout<<endl;
}