zoukankan      html  css  js  c++  java
  • 中点优先顺序遍历数组-递归非递归实现

    递归实现

    #include<stdio.h>
    #define MAX 100
    void print(int p[],int left,int right)
    {
        if(left<=right)
        {
            int mid=(left+right)/2;
            printf("%d
    ",p[mid]);
            print(p,left,mid-1);
            print(p,mid+1,right);
        }
    }

    非递归实现

    void Print(int p[],int left,int right)
    {
        typedef struct
        {
            int l;
            int r;
        }stacknode;
        stacknode stack[MAX];
        int i,j,mid,top=0;
        if(left<=right)//数组不为空
        {
            i=left;j=right;
            while(i<=j||top!=0)//当当前区域不为空或者栈不为空(存在输出序列)
            {
                if(i<=j)//当前区域非空输出该区域
                {
                    mid=(i+j)/2;
                    printf("%d
    ",p[mid]);//优先输出中间
                    //将右边区域入栈保存
                    stack[top].l=mid+1;
                    stack[top].r=j;
                    top++;
                    //进入该区域的左边区域
                    j=mid-1;
                }
                else//该区域为空,出栈得到另一边
                {
                    top--;
                    i=stack[top].l;
                    j=stack[top].r;
                }
            }
        }
    }
    int main()
    {
        int s[7]={1,2,3,4,5,6,7};
        Print(s,0,7-1);
        print(s,0,7-1);
    }
    



    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    MSMQ简例
    C#观察者模式简例
    C#常见算法题目(面试准备)
    HttpWebRequest
    自定义Attribute简例
    .Net下的 ORM框架介紹
    for xml path的应用
    .net中日至框架log4net.dll如何使用
    动态载入.ascx用户控件
    wap 2.0 编写规范
  • 原文地址:https://www.cnblogs.com/Thereisnospon/p/4768517.html
Copyright © 2011-2022 走看看