#include <iostream>
using namespace std;
#define N 7
typedef int ElemType;
typedef struct node{
ElemType data;
struct node *left,*right;
}BTNode;
class Btree{
public:
Btree(ElemType x[],int n);
void insert(ElemType x);
void preOrder();
void preOrder(BTNode *r);
void inOrder();
void inOrder(BTNode *r);
private:
BTNode *root;
};
Btree::Btree(ElemType x[],int n){
root=NULL;
for(int i=0;i<n;i++)
insert(x[i]);
}
void Btree::insert(ElemType x){
BTNode *node=new BTNode;
node->data=x;
node->left=node->right=NULL;
if(root==NULL)
root=node;
else{
BTNode *pre,*cur;
pre=NULL;
cur=root;
while(cur!=NULL&&cur->data!=x){
pre=cur;
if(x<cur->data)
cur=cur->left;
else
cur=cur->right;
}
if(pre==NULL){
delete node;
return;
}
if(pre->data>x)
pre->left=node;
else
pre->right=node;
}
}
void Btree::preOrder(){
preOrder(root);
}
void Btree::preOrder(BTNode *r){
BTNode *stack[N],*p;
int top=-1;
if(r!=NULL){
top++;
stack[top]=r;
while(top>-1){
p=stack[top];
top--;
cout<<p->data<<" ";
if(p->left!=NULL)
stack[++top]=p->left;
if(p->right)
stack[++top]=p->right;
}
}
}
void Btree::inOrder(){
inOrder(root);
}
void Btree::inOrder(BTNode *r){
if(r==NULL)
return;
BTNode *stack[N],*p;
int top=-1;
p=r;
while(top>-1||p!=NULL){
while(p!=NULL){
stack[++top]=p;
p=p->left;
}
if(top>-1){
p=stack[top--];
cout<<p->data<<" ";
p=p->right;
}
}
}
int main()
{
ElemType elems[]={2,5,8,1,6,4,9};
int n=sizeof(elems)/sizeof(ElemType);
Btree tree(elems,7);
tree.preOrder();
cout<<endl;
tree.inOrder();
system("pause");
return 0;
}
二叉树 非递归遍历
最新推荐文章于 2023-04-26 15:06:58 发布