回 帖 发 新 帖 刷新版面

主题:求树的先根遍历的算法!

求树的先根遍历的算法!请教大家!

回复列表 (共3个回复)

沙发

//二叉树的创建,遍历 ,递归方法 
#include <stdio.h>
//节点结构体 
typedef struct BiTNode {
        char data;
         struct BiTNode *lchild,*rchild;
         }BiTNode,*BiTree;
//***********先序建立二叉树中的节点 ******************
void   CreatBiTree(BiTree *T)  //指针的指针 
  {
      char ch;
      
           if((ch=getchar())==' ')
               *T=NULL;
              else 
                 {
                      (*T)=(BiTNode *)malloc(sizeof(BiTNode));
                      if(!(*T))
                      exit(1);
                     (*T)->data=ch;
                      CreatBiTree(&((*T)->lchild));
                      CreatBiTree(&((*T)->rchild));                             
                    }
       }
  
 //***************先序遍历二叉树**********************
 void PreTravel(BiTree T)
 {
     if(T)
         {
             printf("%c ",T->data);
           PreTravel(T->lchild);
            PreTravel(T->rchild);
         }
 }
 //*************中序遍历******************
 void InOrderTravel(BiTree T)
   {
         if(T)
         {
          InOrderTravel(T->lchild);
          printf("%c ",T->data);
          InOrderTravel(T->rchild);
         }
   }            
 //*****************主函数******************
 int main()
 {
     
      BiTree T;
      printf("please input BiTree:\n");  
      CreatBiTree( &T);//指向指针的指针 
      printf("The PerTravel is \n");
      PreTravel(T);
      printf("\nThe InOrder Travel is\n");
      InOrderTravel(T); 
      getch();
      return 0;
 }
         
                               
我写的程序,希望对你有用。
[em1]别忘了加分啊

板凳

我要的是先序遍历‘非递规’算法啊!

3 楼

void porder(BTree *bt)
{
BTree *stack[MaxSize],*p;
int top=-1;
if(bt!=NULL)
{
top++;
stack[top]=bt;
while(top>-1)
{
p=stack[top];
top--;
cout<<p->data<<" ";
if(p->right!=NULL)
{
top++;
stack[to]=p->right;
}
if(p->left!=NULL)
{
top++;
stack[top]=p->left;
}
}
}
}
使用一个栈stack,首先将跟结点入栈,开始循环:从栈中退出当前的p;先访问它,然后将其右结点入栈,再将其左结点入栈,如此直到栈空为止。

我来回复

您尚未登录,请登录后再回复。点此登录或注册