【题目描述】
求一棵二叉树的各个节点的子节点数量之和,比如一棵以根节点编号为1,其左右子节点编号分别为 2 、3的二叉树。其1号节点它的子节点数之和为2,另外2、3两个叶子节点的子节点数量之和为0(默认根结点为1).
【输入输出样例】
输入:
5 2 3 4 5 0 0 0 0 0 0
输出:
4 2 0 0 0
【解题技巧】
可以用左根右的遍历,优先搜索深度,代码注释如下。
【源代码】
#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<iomanip>
#include<cmath>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<queue>
using namespace std;
int a[1010][2];
int n,ans;
void dfs(int x){
if(a[x][0]){//如果左节点不为零,就从左节点继续
ans++;//每次把ans++
dfs(a[x][0]);
}if(a[x][1]){//反之则是右节点
ans++;
dfs(a[x][1]);