更多“已知前序中序求后序procedure Solve(pre,mid:string);var i:integer;”相关问题
  • 第1题:

    二叉树的查找有深度优先和广度优先二类,深度优先包括______。

    A.前序遍历、后序遍历、中序遍历

    B.前序遍历、后序遍历、层次遍历

    C.前序遍历、中序遍历、层次遍历

    D.中序遍历、后序遍历、层次遍历


    正确答案:A
    解析:二叉树的查找有深度优先和广度优先两种。深度优先包括:前序遍历、中序遍历和后序遍历。广度优先包括层次遍历。所以,本题正确答案为选项A。

  • 第2题:

    四、排序算法

    A.快速排序:

    procedure qsort(l,r:integer);

    var i,j,mid:integer;


    正确答案:

     

    begin
    i:=l;j:=r; mid:=a[(l+r) div 2]; {将当前序列在中间位置的数定义为中间数}
    repeat
    while a[i]<mid do inc(i); {在左半部分寻找比中间数大的数}
    while a[j]>mid do dec(j);{在右半部分寻找比中间数小的数}
    if i<=j then begin {若找到一组与排序目标不一致的数对则交换它们}
    swap(a[i],a[j]);
    inc(i);dec(j); {继续找}
    end;
    until i>j;
    if l<j then qsort(l,j); {若未到两个数的边界,则递归搜索左右区间}
    if i<r then qsort(i,r);
    end;{sort}

  • 第3题:

    C.选择排序:

    procedure sort;

    var i,j,k:integer;


    正确答案:

     

    begin
    for i:=1 to n-1 do
    for j:=i+1 to n do
    if a[i]>a[j] then swap(a[i],a[j]);
    end;

  • 第4题:

    E.堆排序:

    procedure sift(i,m:integer);{调整以i为根的子树成为堆,m为结点总数}

    var k:integer;


    正确答案:

     

    begin
    a[0]:=a[i]; k:=2*i;{在完全二叉树中结点i的左孩子为2*i,右孩子为2*i+1}
    while k<=m do begin
    if (k<m) and (a[k]<a[k+1]) then inc(k);{找出a[k]与a[k+1]中较大值}
    if a[0]<a[k] then begin a[i]:=a[k];i:=k;k:=2*i; end
    else k:=m+1;
    end;
    a[i]:=a[0]; {将根放在合适的位置}
    end;

    procedure heapsort;
    var
    j:integer;
    begin
    for j:=n div 2 downto 1 do sift(j,n);
    for j:=n downto 2 do begin
    swap(a[1],a[j]);
    sift(1,j-1);
    end;
    end;

  • 第5题:

    高精度减法

    procedure substract(a,b:hp;var c:hp);

    var i,len:integer;


    正确答案:

     

    begin
    fillchar(c,sizeof(c),0);
    if a[0]>b[0] then len:=a[0] else len:=b[0];
    for i:=1 to len do begin
    inc(c[i],a[i]-b[i]);
    if c[i]<0 then begin inc(c[i],10);dec(c[i+1]); end;
    while (len>1) and (c[len]=0) do dec(len);
    c[0]:=len;
    end;

  • 第6题:

    高精度乘以高精度

    procedure high_multiply(a,b:hp; var c:hp}

    var i,j,len:integer;


    正确答案:

     

    begin
    fillchar(c,sizeof(c),0);
    for i:=1 to a[0] do
    for j:=1 to b[0] do begin
    inc(c[i+j-1],a[i]*b[j]);
    inc(c[i+j],c[i+j-1] div 10);
    c[i+j-1]:=c[i+j-1] mod 10;
    end;
    len:=a[0]+b[0]+1;
    while (len>1) and (c[len]=0) do dec(len);
    c[0]:=len;
    end;

  • 第7题:

    已知中序后序求前序

    procedure Solve(mid,post:string);

    var i:integer;


    正确答案:

     

    begin
    if (mid='''') or (post='''') then exit;
    i:=pos(post[length(post)],mid);
    pre:=pre+post[length(post)]; {加上根,递归结束后pre即为前序遍历}
    solve(copy(mid,1,I-1),copy(post,1,I-1));
    solve(copy(mid,I+1,length(mid)-I),copy(post,I,length(post)-i));
    end;

  • 第8题:

    排列的生成:(1..n)

    procedure solve(dep:integer);

    var

    i:integer;


    正确答案:

     

    begin
    if dep=n+1 then begin writeln(s);exit; end;
    for i:=1 to n do
    if not used[i] then begin
    s:=s+chr(i+ord(''0''));used[i]:=true;
    solve(dep+1);
    s:=copy(s,1,length(s)-1); used[i]:=false;
    end;
    end;

  • 第9题:

    链表的定位函数

    loc(I:integer):pointer; {寻找链表中的第I个结点的指针}

    procedure loc(L:linklist; I:integer):pointer;

    var p:pointer;

    j:integer;


    正确答案:

     

    begin
    p:=L.head; j:=0;
    if (I>=1) and (I<=L.len) then
    while j<I do begin p:=p^.next; inc(j); end;
    loc:=p;
    end;

  • 第10题:

    单链表的删除操作

    procedure delete(L:linklist; I:integer);

    var p,q:pointer;


    正确答案:

     

    begin
    p:=loc(L,I-1);
    q:=p^.next;
    p^.next:=q^.next;
    dispose(q);
    dec(L.len);
    end;

  • 第11题:

    在一棵二叉树的前序遍历、中序遍历、后序遍历所产生的序列中,所有叶结点的先后顺( )。

    A.都不相同

    B.完全相同

    C.前序和中序相同,而与后序不同

    D.中序和后序相同,而与前序不同


    正确答案:B

  • 第12题:

    单选题
    二叉树在线索化后,仍不能有效求解的问题是()
    A

    前序线索二叉树中求前序后继

    B

    中序线索二叉树中求中序后继

    C

    中序线索二叉树中求中序前趋

    D

    后序线索二叉树中求后序后继


    正确答案: A
    解析: 暂无解析

  • 第13题:

    C. Dijkstra 算法:

    var

    a:array[1..maxn,1..maxn] of integer;

    b,pre:array[1..maxn] of integer; {pre[i]指最短路径上I的前驱结点}

    mark:array[1..maxn] of boolean;

    procedure dijkstra(v0:integer);


    正确答案:

     

    begin
    fillchar(mark,sizeof(mark),false);
    for i:=1 to n do begin
    d[i]:=a[v0,i];
    if d[i]<>0 then pre[i]:=v0 else pre[i]:=0;
    end;
    mark[v0]:=true;
    repeat {每循环一次加入一个离1集合最近的结点并调整其他结点的参数}
    min:=maxint; u:=0; {u记录离1集合最近的结点}
    for i:=1 to n do
    if (not mark[i]) and (d[i]<min) then begin
    u:=i; min:=d[i];
    end;
    if u<>0 then begin
    mark[u]:=true;
    for i:=1 to n do
    if (not mark[i]) and (a[u,i]+d[u]<d[i]) then begin
    d[i]:=a[u,i]+d[u];
    pre[i]:=u;
    end;
    end;
    until u=0;
    end;

  • 第14题:

    B.插入排序:

    思路:当前a[1]..a[i-1]已排好序了,现要插入a[i]使a[1]..a[i]有序。

    procedure insert_sort;

    var i,j:integer;


    正确答案:

     

    begin
    for i:=2 to n do begin
    a[0]:=a[i];
    j:=i-1;
    while a[0]<a[j] do begin
    a[j+1]:=a[j];
    j:=j-1;
    end;
    a[j+1]:=a[0];
    end;
    end;{inset_sort}

  • 第15题:

    D. 冒泡排序

    procedure bubble_sort;

    var i,j,k:integer;


    正确答案:

     

    begin
    for i:=1 to n-1 do
    for j:=n downto i+1 do
    if a[j]<a[j-1] then swap( a[j],a[j-1]); {每次比较相邻元素的关系}
    end;

  • 第16题:

    高精度数的定义:

    type

    hp=array[1..maxlen] of integer;

    1.高精度加法

    procedure plus ( a,b:hp; var c:hp);

    var i,len:integer;


    正确答案:

     

    begin
    fillchar(c,sizeof(c),0);
    if a[0]>b[0] then len:=a[0] else len:=b[0];
    for i:=1 to len do begin
    inc(c[i],a[i]+b[i]);
    if c[i]>10 then begin dec(c[i],10); inc(c[i+1]); end; {进位}
    end;
    if c[len+1]>0 then inc(len);
    c[0]:=len;
    end;{plus}

  • 第17题:

    高精度乘以低精度

    procedure multiply(a:hp;b:longint;var c:hp);

    var i,len:integer;


    正确答案:

     

    begin
    fillchar(c,sizeof(c),0);
    len:=a[0];
    for i:=1 to len do begin
    inc(c[i],a[i]*b);
    inc(c[i+1],(a[i]*b) div 10);
    c[i]:=c[i] mod 10;
    end;
    inc(len);
    while (c[len]>=10) do begin {处理最高位的进位}
    c[len+1]:=c[len] div 10;
    c[len]:=c[len] mod 10;
    inc(len);
    end;
    while (len>1) and (c[len]=0) do dec(len); {若不需进位则调整len}
    c[0]:=len;
    end;{multiply}

  • 第18题:

    高精度除以低精度

    procedure devide(a:hp;b:longint; var c:hp; var d:longint);

    {c:=a div b; d:= a mod b}

    var i,len:integer;


    正确答案:

     

    begin
    fillchar(c,sizeof(c),0);
    len:=a[0]; d:=0;
    for i:=len downto 1 do begin
    d:=d*10+a[i];
    c[i]:=d div b;
    d:=d mod b;
    end;
    while (len>1) and (c[len]=0) then dec(len);
    c[0]:=len;
    end;

  • 第19题:

    已知前序后序求中序的一种

    function ok(s1,s2:string):boolean;

    var i,l:integer; p:boolean;


    正确答案:

     

    begin
    ok:=true;
    l:=length(s1);
    for i:=1 to l do begin
    p:=false;
    for j:=1 to l do
    if s1[i]=s2[j] then p:=true;
    if not p then begin ok:=false;exit;end;
    end;
    end;

    procedure solve(pre,post:string);
    var i:integer;
    begin
    if (pre='''') or (post='''') then exit;
    i:=0;
    repeat
    inc(i);
    until ok(copy(pre,2,i),copy(post,1,i));
    solve(copy(pre,2,i),copy(post,1,i));
    midstr:=midstr+pre[1];
    solve(copy(pre,i+2,length(pre)-i-1),copy(post,i+1,length(post)-i-1));
    end;

  • 第20题:

    组合的生成(1..n中选取k个数的所有方案)

    procedure solve(dep,pre:integer);

    var

    i:integer;


    正确答案:

     

    begin
    if dep=k+1 then begin writeln(s);exit; end;
    for i:=1 to n do
    if (not used[i]) and (i>pre) then begin
    s:=s+chr(i+ord(''0''));used[i]:=true;
    solve(dep+1,i);
    s:=copy(s,1,length(s)-1); used[i]:=false;
    end;
    end;

  • 第21题:

    单链表的插入操作

    procedure insert(L:linklist; I:integer; x:datatype);

    var p,q:pointer;


    正确答案:

     

    begin
    p:=loc(L,I);
    new(q);
    q^.data:=x;
    q^.next:=p^.next;
    p^.next:=q;
    inc(L.len);
    end;

  • 第22题:

    已知二叉树后序遍历序列是dabec,中序遍历序列是debac,那么它的前序遍历序列是( )。A.AcbedSXB

    已知二叉树后序遍历序列是dabec,中序遍历序列是debac,那么它的前序遍历序列是( )。

    A.Acbed

    B.decab

    C.deabc

    D.cedba


    正确答案:D
    二叉树的遍历有3种:前序、中序和后序。①前序遍历访问根结点,然后按左右顺序遍历子结点;②中序首先遍历左子树,然后访问根结点,最后遍历右子树;③后序遍历首先遍历左子树,然后遍历右子树,最后访问根结点。本题根据后序和中序遍历的结果可以得出二叉树的结构,然后再对其进行前序遍历,正确答案选项为D。

  • 第23题:

    已知某二叉树的后序遍历为dabcc,中序遍历为debac,则它的前序遍历为()。


    正确答案:cedba