c实现树的创建和遍历

#include<iostream.h>
#define OK 1;
#define ERROR 0;
#define MAXSIZE 100;

typedef struct Node{
      int data;
      struct Node *lchild;
      struct Node *rchild;
}Node,*pNode;

typedef struct SqStack{
      pNode stack[MAXSIZE];
      int top;
}SqStack;

   //先序遍历
 void preOrderUnrec(pNode T,SqStack *s){
       push(T,s);
       pNode p=T;
       while(s->top!=0&&p!=NULL){
           while(s->stack[s->top]!=NULL){
               p=s->stack[s->top];  //得到当前结点的指针
               printf(p->data);          //输出树节点的值       
               push(p->lchild,s);     //将当前结点的左孩子压入栈中
           }
           pop(s);                      //第一次出栈,出空元素,指针下移           
           p=pop(s);                    //第二次出栈,出当前结点,指针下移
           push(p->rchild,s);           //压入当前结点的右孩子,指针指向右孩子
           p=s->stack[s->top];
       }
 }
 
    //中序遍历
  void preOrderTracerse(pNode T,SqStack *s){
       push(T,s);
       pNode p=T;
       while(s->top!=0&&p!=NULL){
           while(s->stack[s->top]!=NULL){    
               p=s->stack[s->top];
               push(p->lchild,s);     //将当前结点的左孩子压入栈中
           }
           pop(s);                      //第一次出栈,出空元素,指针下移           
           p=pop(s);                    //第二次出栈,出当前结点,指针下移
           printf(p->data);
           push(p->rchild,s);           //压入当前结点的右孩子,指针指向右孩子
           p=s->stack[s->top];
       }
 }
 
 //create a tree with recuresive method
 void createTree(pNode *T){
       int ch;
       cin<<ch;
       if(ch==0)
        {
              T=NULL;
        }
        else
        {
             T=(pNode)malloc(sizeof(Node));
             T->data=ch;
             createTree(&((*T)->lchild));
             createTree(&((*T)->lchild));
        }
 }
 
 //pop a Node
  pNode pop(SqStack *s){
             pNode* p;
         if(s->top==0)
         {
            printf("%s","stack is empty");
            return NULL;
         }
         else
         {
               s->top--;
               p=s->stack[s->top];
             return p;
         }
  }
  //push a Node
 void push(SqStack *s,pNode T){
        if(s->top==MAXSIZE)
        {
               printf("%s","stack output");
        }
        else{
           s->top++;
           s->stack[s->top]=T;
        }
 }
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酒徒词客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值