剑指OFFEEnclave之从上往下打字与印刷二叉树,剑指

作者: 韦德国际1946手机版  发布:2019-08-27

题目陈说:

输入三个矩阵,依照从外向里以顺时针的相继依次打字与印刷出每多个数字,比方,若是输入如下矩阵:

1 2 3 4

5 6 7 8

剑指OFFEEnclave之从上往下打字与印刷二叉树,剑指OFFE昂Cora之顺时针打字与印刷矩阵。9 10 11 12

13 14 15 16

则相继打字与印刷出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.

 

输入:
输入可能含有多少个测量检验样例,对于每种测验案例,

输入的首先行富含多少个整数m和n(1<=m,n<=一千):表示矩阵的维数为m行n列。

接下去的m行,每行富含n个整数,表示矩阵的因素,个中每一种元素a的取值范围为(1<=a<=10000)。

 

输出:
对应各种测量试验案例,输出一行,

鲁人持竿从外向里以顺时针的各种依次打字与印刷出每一个数字,各样数字背后皆有八个空格。

 

样例输入:
4 4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

样例输出:

1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10 

难题陈诉:

从上往下打字与印刷出二叉树的各类节点,同层节点从左至右打字与印刷。

 

输入:
输入或然含有多少个测验样例,输入以EOF停止。
对于各类测验案例,输入的第一行二个整数n(1<=n<=一千, :n代表将在输入的二叉树成分的个数(节点从1起来编号)。接下来一行有n个数字,代表第i个二叉树节点的成分的值。接下来有n行,每行有三个字母Ci。
Ci=’d’表示第i个节点有两子孩子,紧接着是左孩子编号和右孩子编号。
Ci=’l’表示第i个节点有二个左孩子,紧接着是左孩子的号子。
Ci=’r’表示第i个节点有二个右孩子,紧接着是右孩子的号子。
Ci=’z’表示第i个节点未有子孩子。

 

输出:
对应每种测量检验案例,
依照从上之下,从左至右打字与印刷出二叉树节点的值。

 

样例输入:

7
8 6 5 7 10 9 11
d 2 5
d 3 4
z
z
d 6 7
z
z

 

样例输出:

8 6 10 5 7 9 11

解题思路:

  那道难点有一个坑人的地点,可是难题中早已认证了,正是各类数字前面都有二个空格,由此,最终贰个数字也有空格的

  主要的构思是:选择一层一层的脱离输出。大家标识好每一回行threshold_m与列threshold_n的限量,然后经过点名输出的终点,来调用输出函数。

     threshold_n = n;
        threshold_m = m;
        i=0;
        j=0;
        while(i<threshold_m && j < threshold_n){
            printMatrix(i,j);
            i  ;
            j  ;
            threshold_n--;
            threshold_m--;
        }

 

void printMatrix(int m,int n){
    int i=m,j=n;
    for( ;j<threshold_n;j  ){
        printf("%d ",arr[i][j]);
    }
    j--;
    for(i  ;i<threshold_m;i  ){
        printf("%d ",arr[i][j]);
    }
    i--;
    for(j--;j>=n && i!=m;j--){
        printf("%d ",arr[i][j]);
    }
    j  ;
    for(i--;i>m && j!=threshold_n-1;i--){
        printf("%d ",arr[i][j]);
    }
}

 

解题思路:

  很卓越的广度优先算法,没什么说的了。

  广度优先算法看这里

  算法理念:

  1 扫描最顶层的树节点,把它的子女节点放入队列。

  2 每一趟扫描队列队头节点,仍把它的儿女步向到队中,并遵照先左孩子,再右孩子的种种,那样保险一层的左右每一种。

  3 直到队列为空。

//main()中的代码 
   findTree(a,n,1);
        while(begin_q != end_q){
            findTree(a,n,Quene[begin_q  ]);
        }

//扫描函数
void findTree(treeArr *a,int n,int j){
    if(j<=n){
        result[top_result  ]=a->arr[j].num;
    }
    if(a->arr[j].lchild != 0){
        Quene[end_q  ] = a->arr[j].lchild;
    }
    if(a->arr[j].rchild != 0){
        Quene[end_q  ] = a->arr[j].rchild;
    }
}    

 

本文由韦德国际1946发布于韦德国际1946手机版,转载请注明出处:剑指OFFEEnclave之从上往下打字与印刷二叉树,剑指

关键词:

上一篇:面向对象,为何要面向对象
下一篇:没有了