#include<stdio.h>
#include<iostream>
#include<stdlib.h>
#define ok 0
#define error -1
#define true 0
#define false -1
#define max 9
#define k 3
#define v 10
using namespace std;
typedef int status;
typedef int elem;
typedef struct no
{
int data;
struct no *lchild, *rchild;
} noe, *noa;
typedef struct an
{
struct no *dat;
struct an *next;
}ane, *anc;
typedef struct
{
anc top;
anc base;
int len;
}sqstack;
int main()
{
noa t ;
elem a, e, value;
int c, d;
cout << "please select operations which create tree: 1 to " << k << endl;
cout << "c:(1:precreat_tree,2:inordercreat_tree,3:postordercrat_tree)" << endl;
cin >> c;
switch(c)
{
case 1:
cout << "preordercreat_tree" << endl;
precreat_tree(t);//创建二
break;
case 2:
cout << "inordercreat_tree" << endl;
inordercreat_tree(t);
break;
/*case 4:
cout << "postordercrat_tree" << endl;
postordercrat_tree(t);
break;*/
}
cout<<"please select operations" << endl;
cout << "please enter number d: 1 to " << v <<endl;
cout << "1:pretraverse" << endl;
cout << "2:inordertraverse" << endl;
cout << "3:postordertraverse" << endl;
cout << "4:bitreeempt" << endl;
cout << "5:bitree_depth" << endl;
cout << "6:bitree_root" << endl;
cout << "7:s2bitree_value" << endl;
cout << "8:Assign" << endl;
cout << "9:parent" << endl;
cout << "10:pretraverse_2tree" << endl;
cin>> d;
switch(d)
{
case 1:
cout << "pretraverse" << endl;
pretraverse_tree(t, *visit);//先序遍历二叉�?
break;
case 2:
cout << "inordertraverse" << endl;
inordertraverse(t, *visit);
break;
case 3:
cout << "postordertraverse" << endl;
postordertraverse (t, *visit);
break;
case 4:
cout << " bitreeempt" << endl;
bitreeempt(t); //检验二叉树�?否为空,空则返回false,否则返回true
break;
case 5:
cout << "put out the tree'depth" << endl;
cout << bitree_depth(t) << endl;
break;
case 6:
cout << "return root node" << endl;
bitree_root(t);
break;
case 7:
cout << "look for value in the tree" << endl;
cout << "please put a" << endl;
cin >> a;
cout << bitree_value(t, a);
break;
case 8:
cout << "Assign" << endl;
cout << "please enter e ";
cin >>e;
cout<< " and enter value" ;
cin >> value;
Assign(t, e, value);
break;
case 9:
cout << "look for the e parent "<<" please enter e: ";
cin >> e;
parent(t, e);
break;
case 10:
cout << "pretraverse_2tree" << endl;
pretraverse_2tree(t, *visit);
break;
}
return ok;
}
status Initstack(sqstack &S)
{
S.top = new ane[1];
if(!S.top)
{
cout << "fail" << endl;
return error;
}
else
S.base = S.top;
S.len = 0;
return ok;
}
status push(sqstack &S, noa &q)
{
anc p=new ane[1];
if(!p)
{
cout << "fail" << endl;
return error;
}
p->dat = q;
p->next = S.top->next;
S.top->next = p;
if(S.len==0)
S.base = p;
S.len++;
return ok;
status pop(sqstack &S, noa &p)
{
if(!p)
{
cout << "fail" << endl;
return error;
}
anc q = S.top->next;
p = q->dat;
//p = S.top->next->dat;
S.top->next = S.top->next->next;
delete[] q;
//S.len--;
return ok;
}
status precreat_tree(noa &t)
{
int e;
cin >> e;
if(e!=0)
{
t = new noe[1];
if(!t)
{
cout << "fail" << endl;
return error;
}
else
{
t->data = e;
precreat_tree(t->lchild);
precreat_tree(t->rchild);
}
}
else
t = NULL;
return error;
}
int visit(int e)
{
cout << e << endl;
return 0;
}
我想求教大佬们能不能教导我为什么我利用非递归先序遍历,却只能输出左子树,而不能输出右子树