• (经典)二叉树的层次遍历和快速排序


    //层次遍历
    void LevelOrder(BiTree T) ///////MDMDMD  这里是BiTree 不是BTNode
    {  
    
        //管他啥linkedlist还是什么list,类型出现的地方很少,queue容器装入的是指针类型
        queue<BiTree> queue;
        
        queue.push(T);         //算法1:根结点入队列
    
        while(!queue.empty()){ //算法2:若队列非空则循环执行算法3到5
    
            T = queue.front(); //算法3:对头元素出队,指针从新指向,front()方法是将返回队头元素        
            printf("%c",T->data);//队头元素出队然后将队头元素的左右孩子入队
            queue.pop();//pop是出队
    
            if(T->lchild != NULL){//算法4:左子树不空,将左子树入队
                queue.push(T->lchild);//入队的就是一个地址元素
            }
    
            if(T->rchild != NULL){//算法5:右子树不空,将右子树入队
                queue.push(T->rchild);
            }
        }
    }
    
    
    
    
    
    void quicksort(int a[],int left,int right)
    {    int i=left;int j=right;int temp;
    
         if(i>j) return;//这是一个隐藏的大bug,必须是大于符号
    
         temp=a[i];   //算法1:将数组中最左端的那个元素当做哨兵
         while(i<j)   //算法2:若i<j则循环执行算法3到4
         {
            while(a[j]>=temp&&j>i)  j--; //算法3:从后向前找一个比哨兵小的元素并放入i指向的位置
            if(j>i)    a[i++]=a[j];
    
            while(a[i]<=temp&&j>i)   i++;//算法4:..........
            if(j>i)     a[j--]=a[i];
         }
         a[i]=temp;//算法5:经过一趟排序,左边的比他小,右边的元素比他大
    
    
        quicksort(a,left,i-1);//像二叉树的递归遍历
        quicksort(a,i+1,right);//也像二分查找的递归算法
    }
    
    int main()
    {   
      
    int k;//黑盒测试,测了很多遍正确 int a[]={-44,-90,81110,80,1,1,1,-99,-99,-99}; //>= <=即使没有等号也可以成立 quicksort(a,0,9); for(k=0;k<=9;k++) printf("%d ",a[k]); return 0; }
  • 相关阅读:
    I Hate It(线段树点修改区间查询)
    DFS(dfs)
    时间复杂度和空间复杂度的简单讲解
    [转]matlab读取cvs文件的几种方法
    适合小白的大白话讲解 --->Git 与 Github 的区别
    [转]串口、COM口、UART口, TTL、RS-232、RS-485区别详解
    Pandas学习之(一)
    正规表示法
    Numpy解决问题实例--随机漫步
    Python 中range和xrange的详细区别
  • 原文地址:https://www.cnblogs.com/cs-lcy/p/7077043.html
Copyright © 2020-2023  润新知