#include <iostream>
#include <stack>
using namespace std;
typedef struct Node
{
int value;
struct Node *left;
struct Node *right;
}Node,*pNode;
stack<pNode> stack1;
pNode init()//创建二叉树
{
pNode node[7];
int i;
for(i=0;i<7;i++)
{
node[i] = new Node();
node[i]->value = i;
node[i]->left = NULL;
node[i]->right = NULL;
}
for(i=0;i<=2;i++)
{
node[i]->left = node[2*i+1];
node[i]->right = node[2*i+2];
}
return node[0];
}
//对于任一结点P:
//访问结点P,并将结点P入栈;
//判断结点P的左孩子是否为空,若为空,则取栈顶结点并进行出栈操作,并将栈顶结点的右孩子置为当前的结点P,循环至1);若不为空,则将P的左孩子置为当前的结点P;
//直到P为NULL并且栈为空,则遍历结束。
void preorder_traversal(pNode root)
{
pNode p = root;
while(p!=NULL || !stack1.empty())
{
while(p!=NULL)//遍历左子树
{
cout<<p->value<<" ";
stack1.push(p);
p = p->left;
}
if(!stack
二叉树的非递归遍历
最新推荐文章于 2022-10-18 10:02:18 发布