非递归二叉树中序遍历?????

来源:百度知道 编辑:UC知道 时间:2024/05/18 22:43:40
我的程序遍历怎么就是遍历不出最后一个元素啊。 比如输入二叉树数据
abd..e..c.. 遍历时就是遍历不了最后一个元素 c ,请教下强人这要怎么修改我以下的遍历啊!

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

struct TREE //二叉树结点结构
{
char data;
struct TREE *lsubtree;
struct TREE *Rsubtree;
};

struct TREE *tree;

void createtree(struct TREE *&p) //先序法创建二叉树
{
char ch;
ch=getchar();
if(ch=='\n')
return;
else if(ch=='.')
p=NULL;
else
{
p=(struct TREE*)malloc(sizeof(struct TREE));//分配结点空间
p->data=ch;
createtree(p->lsubtree); //递归创建左子树
createtree(p->Rsubtree); //递归创建右子树
}
return;
}

void inorder(TREE *tree)//非递归中序遍历
{
struct TREE *p;
struct TREE *s[100];//栈S用来存放结点
int top=-1;
p=tree;
do {
while(p!=NULL)
{ top=top

1,生成二叉树的时候,根本不知道自己在给哪个节点添加子节点,更不知道是左子还是右子,顺序错了也不知道。可以把输入都放进数组,然后根据你的生成顺序来读取数组,数据结构上只要讲到树肯定会讲到这个的

2,排序函数太乱了,还没有注释。。。最好去搜一下网上现成的函数看看吧。。。
void BT_InOrderNoRec(pTreeT root)
{
stack<treeT *> s;
while ((NULL != root) || !s.empty())
{
if (NULL != root)
{
s.push(root);
root = root->left;
}
else
{
root = s.top();
visit(root);
s.pop();
root = root->right;
}
}
}
visit函数里面判断是否非空