龙空技术网

基础练习1

小羊的Debug 92

前言:

现在我们对“求二叉树宽度算法”都比较关心,兄弟们都想要知道一些“求二叉树宽度算法”的相关内容。那么小编也在网络上搜集了一些有关“求二叉树宽度算法””的相关内容,希望你们能喜欢,小伙伴们一起来了解一下吧!

设计一个算法,删除递增有序表中大于mink且小于maxk的所有元素void Delete_Min_Max(LinkList&L,int mink,int maxk){p=L->next;  while(p&&p->data<=mink)  {pre=p;    p=p->next;  }  while(p&&p->data<maxk)    p=p->next;  q=pre->next;  pre->next=p;  while(q!=p)  {      s=q->next;    free(q);    q=s;  }}已知一个双向循环链表,从第二个结点至表尾递增有序,要求将第一结点插入到链表中,使整个链表递增有序void DInsert(DLinkedList  dl)//dl是无头结点的双向循环链表,自第二结点插入到链表{s=la;//暂存第一节点的指针p=la->next;p->prior=la->prior;p->prior->next=p;//将第一结点从链表上摘下来 while(p->data<x)//查插入位置   p=p->next;  s-next=p;  s->prior=p->prior;  p->prior->next=s;  p->prior=s;//插入原第一节点}if(p->data<x)  p-p->next;else  break;} 给定一个链表,判断链表中是否有环,有返回1,没有返回0快慢指针遍历链表,如果有环,指针相遇int hasCycle(ListNode*head){//判断链表中是否有环  if(head==NULL||head->next==NULL)//链表为空,或者只有一个结点一定不会带环    return 0;  ListNode*fast=head->next;  ListNode*slow=head;  while(slow!=fast)  {if(fast==NULL||fast->next==NULL)  return 0;    slow=slow->next;    fast=fast->next->next;  }  return 1;}计算二叉树的最大宽度int width(BiTree T){//求二叉树高度  if(T==NULL)    return 0;//空树  else  {BiTree Q[MaxSize];//假设队列容量足够大front=rear=-1;//初始化 int  last=1;//同层最右结点在队列中的位置int tmp=0;//局部高度int  maxw=0;//最大宽度  Q[rear]=T;//根节点入队    BiTree p;    while(front<=rear)    {p=Q[++front];      tmp++;  if(p->lchild!=NULL)    Q[++rear]=p->lchild;//左子树入队      if(p->rchild!=NULL)        Q[++rear]=p-rchild;//右子树入队      if(front>last)      {last=real;//指向下层最右元素        if(tmp>maxw)//更新当前最大宽度          maxw=tmp;        tmp=0;      }    }    return maxw;  }}假设二叉树采用二叉链存储结构存储,设计一个算法,求后序遍历序列中第K个结点的值int n=1;//全局变量Elem  Type PostNode(BTNode* b,int k){Elem Type ch;  if(b==NULL)    return' ';  ch=PostNode(b->lchild,k);//遍历左子树  if(ch!=' ')//在左子树找到了就返回    return ch;  else  { ch=PostNode(b->rchild,k);//遍历右子树    if(ch!=' ')//在右子树找到就返回      return ch;    if(n==k)      return b->data;    n++;  }} 二叉排序树采用二叉链表存储,删除结点值是X的结点,要求删除该结点后,此树仍然是一颗二叉排序树,   并且高度没有增长void  Delete(BSTree bst,keytype X){BSTree f,p=bst;  while(p&&p->key!=X)    if(p->key>x)    {f=p;p=p->lchild;    }  else{f=p; p=p->rchild;    if(p==null)    {printf("无关键字为X的结点\n");      exit(0);    }    if(p->lchild==null)//被删结点无左子树      if(f->lchild==p)        f->lchild=p->rchild;//将被删结点的右子树接到其双亲上    else//被删结点有左子树    {q=p;      s=p->lchild;      while(s->rchild!=null)//左子树中最右下的结点      {q=s;        s=s->rchild;      }      p->key=s->key;//结点值用其左子树最右下的结点的值代替      if(q==p)//被删结点左子树的根节点无右子女        p->lchild=s->lchild;      else//被删结点左子树中序序列最后一个结点        q->rchild=s->lchild;      free(s);    }  }  写出折半查找非递归算法  int Binary_Search(SqList L,ElemType key)  {int low=0,high=L,length-1,mid;    while(low<=high)    {mid=(low+high)/2;//取中间位置      if(L.elem[mid]==key)        return mid;//查找成功返回所在位置      else if(L.elem[mid]>key)        high=mid-1;//从前半部分查找      else        low=mid+1;//从后半部分查找    }return -1;  }   二叉树的自下而上,从左到有的层次遍历算法         void InvertLevel(BITree bt)  {Stack S;Queue Q;    if(bt!=NULL)    {InitStack(S);InitQueue(Q);EnQueue(Q,bt);      while(IsEmpty(Q)==flase)//从上而下层次遍历      {DeQueue(Q,p);        Push(S,p);//出队,入栈        if(p->lchild)          EnQueue(Q,p->lchild);//左子树不为空,左子树入队          EnQueue(Q,p->rchild);//右子树不为空,右子树入队        if(p->rchild)}        while(IsEmpty(s)==flase)        {Pop(S,p);          visit(p->data);//自下而上,从右到左的层次遍历        }      }    }    while(IsEmpty(s)==flase)    {Pop(S,p);      visit(p->data);    }  }} 在单链表中实现直接插入排序 void  Sort(LinkList L){LinkList p,pre,q,p1;  p=L->next->next;  L->next->next=NULL;  while(p)  {pre=L;    q=pre->next;    while(q!=NULL&&q->data<p->data)    {pre=q; q=q->next;    }    p1=p->next;    p->next=pre->next;    pre->next=p;    p=p1;  }}          给定一个脸部奥,两两交换其中相邻的节点,并返回交换后的链表.你不能只是改变节点内部的值,而是需要实际的进行节点交换    public static ListNode    Swap(ListNode head){if(head==null||head,next==null){return head;} ListNode pre=head; ListNode preNext=head,next; ListNode cur=preNext,next;  pre,next=cur;  preNext.next=pre;  head=preNext;  while(cur!=null&&cur.next!=null){preNext=cur.next;    cur=preNext.next;    pre.next.next=cur;    preNext.next=pre.next;   pre.next=preNext;    pre=preNext.next;  }  return head;}                                                                                                                                                                                                                                                     

标签: #求二叉树宽度算法