非递归中序遍历二叉树
struct TreeNode
{
int value;
TreeNode* LTree;
TreeNode* RTree;
}
void inorder(TreeNode* TRoot)
{
if(TRoot ==nullptr)
{
cout << "BTree is null" <<endl;
return;
}
stack<TreeNode*> TreeStack;
TreeNode* Tree = TRoot;
while(Tree != nullptr || !TreeStack.empty())
{
while(Tree != nullptr)
{
TreeStack.push_back(Tree);
Tree = Tree->LTree;
}
if(!TreeStack.empty())
{
Tree=TreeStack.top();
cout << Tree.value << " ";
TreeStack.pop();
Tree = Tree->RTree;
}
}
}
非递归后序遍历二叉树
void last(TreeNode* TRoot)
{
if(TRoot ==nullptr)
{
cout << "BTree is null" <<endl;
return;
}
stack<TreeNode*> TreeStack;
TreeNode* current = nullptr;
TreeNode* pre = nullptr;
TreeStack.push_back(TRoot);
while(TreeStack.empty())
{
current = TreeStack.top();
if((current->LTree == nullptr && current->RTree == nullptr) || (pre != nullptr && (pre == current->LTree || pre == current->RTree)))
{
cout << current.value << "";
TreeStack.pop();
pre = current;
}
else
{
if(current->RTree != nullptr)
{
TreeStack.push_back(current->RTree);
}
if(current->LTree != nullptr)
{
TreeStack.push_back(current->LTree);
}
}
}
}