非递归方法前序遍历二叉树

来源:互联网 发布:js防水涂料 施工方法 编辑:程序博客网 时间:2024/06/05 06:51

typedef char BTreeData;

// 二叉树的结点

typedef struct _btreeNode

{

BTreeData data;

struct _btreeNode *lchild;   // 指向左孩子结点的指针

struct _btreeNode *rchild;   // 指向右孩子结点的指针

}BTreeNode;

 

// 二叉树

typedef struct _btree

{

BTreeNode *root;     // 指向二叉树的根节点

int  count;          // 记录二叉树结点的个数

}BTree;

 

BTree *Create_BTree()

{

BTree *btree = (BTree*)malloc(sizeof(BTree)/sizeof(char));

if (btree == NULL)

return NULL;

btree->count = 0;

btree->root  = NULL;

return btree;

}

 

//非递归前序遍历

void pre_order (BTreeNode *node)

{

if (node == NULL)

{

errno = ERROR;

return;

}

LinkStack *Stack = Create_Stack ();

BTreeNode *tmp = node;   //指向当前节点

while (tmp)

{

printf("%4c",tmp->data);

Push (Stack,tmp);

if (tmp->lchild)

{

tmp = tmp->lchild;

continue;

}

while(StackEmpty(Stack) != TRUE)

{

Pop (Stack,&tmp);

if(tmp = tmp->rchild)

{

break;

}

}

}

}

}