顺序表的优先遍历

要求:先输出中点的元素值,再输出中点左部的元素值,再输出中点右部的元素值。
递归法:1.注意递归的出口条件 left>right;
              2.只需要处理好一个问题,再用递归处理其余模式相同的小问题。

程序如下:

#include <stdio.h>
#include <stdlib.h>
#define Max 100

typedef int datatype;

typedef struct {
    datatype A[Max];
    int size;
}List;

void creat(List * P)
{
    int i=0;
    int m;
    printf("ÇëÊäÈëÔªËØ\n");
    scanf("%d",&m);
    while(m!=-1)
    {
        P->A[i++]=m;
        P->size++;
        scanf("%d",&m);
    }
}

void init(List * p)
{
    p->size=0;
}

void display(List A)
{
    int i;
    for(i=0;i<A.size;i++)
    {
        printf("%5d",A.A[i]);
    }
}

void display1(List p,int left,int right)
{
    int mid;
    if(left<=right)// 注意递归的出口条件
    {
        mid=(left+right)/2;
        printf("%5d",p.A[mid]);
        display1(p,left,mid-1); //先用递归输出中点左边的值
        display1(p,mid+1,right);  // 再用递归输出中点右边的值
    }
}

int main()
{
    List p;
    init(&p);
    creat(&p);
    display(p);
    printf("\n");
    display1(p,0,p.size-1);
    return 0;
}

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页