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);
    }
    



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

  • 相关阅读:
    jenkins安装
    HTTP协议客户端是如何向服务器发送请求
    接口概念
    fiddler导出har格式转化成yml格式

    双硬盘双系统装错了记录
    chrome的版本和driver版本对应表
    monkey详解
    adb命令熟悉
    cookie、session、token
  • 原文地址:https://www.cnblogs.com/Thereisnospon/p/4768517.html
Copyright © 2011-2022 走看看