队列应用——杨辉三角(C++实现)
实现代码
#include<bits/stdc++.h>
using namespace std;
int main(int argc, char const *argv[])
{
int n;
while(~scanf("%d", &n) && n > 0){
queue<int> q;
printf("%d\n", 1);
q.push(0);
q.push(1);
q.push(0);
for(int i = 2; i<= n; i++){
for(int j = 1; j <= i; j++){
int val = q.front();
q.pop();
val += q.front();
q.push(val);
printf("%d ", val);
}
q.push(0);
printf("\n");
}
}
return 0;
}
算法思路
- 树的层次遍历
上述实现算法思路类似于树的层序遍历
二叉树遍历(层次遍历)(前中后序遍历)(C++实现) - 思路
先将0、1、0入队,然后从第二层开始循环,每行i个数,每次将出队一个元素和出队后队首元素的值(为此时第i行第j个元素上方两数)加起来作为第i行第j个元素的值,输出并入队(作为第i+1行对应元素上方的两个元素的其中一个),循环直到第n行结束,输出结束。
输入数据
6
10
输出数据
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
最后
- 由于博主水平有限,不免有疏漏之处,欢迎读者随时批评指正,以免造成不必要的误解!