版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hahachenchen789/article/details/83339839
前序遍历:
void Disp(Node* root)
{
if(root==nullptr)
return;
stack<Node*> p;
p.push(root);
while(!p.empty())
{
Node* node=p.top();
p.pop();
cout<<node.data<<endl;
if(node.right)
p.push(node.right);
if(node.left)
p.push(node.left);
}
}
中序遍历
void Disp_mid(Node* root)
{
if(root == nullptr)
return;
stack<Node*> p;
Node* node=root;
while(node!=nullptr || !p.empty())
{
while(node!=nullptr) //一直遍历到最左边的节点
{
p.push(node);
node=node.left;
}
if(!p.empty())
{
node=p.top();
p.pop();
cout<<node.data<<endl;
node=node.right;
}
}
}
后序遍历
void Disp_behind(Node* root)
{
if(root==nullptr)
return;
stack<Node*> p;
Node* node=root;
Node* pre=nullptr;
while(node!=nullptr || !p.empty())
{
while(node!=nullptr)//一直遍历到最左边的节点
{
p.push(node);
node=node.left;
}
node=p.top();
if(node.right==nullptr || node.right==pre)//没有右节点或者右节点已经被访问
{
cout<<node.data<<endl;
p.pop();
pre=node;
node=nullptr;
}
else
{
node=node.right;
}
}
}