题目粗心
给定一颗二叉搜寻树的插入序列,计算最初两层的节点个数
算法思路
首先咱们将这n个数字顺次插入到二叉搜寻树中,而后应用层序遍历获取每一层节点的数目和最大层数maxLevel,L[maxLevel],L[maxLevel-1]就是最初一层和倒数第二层的节点个数
提交后果
AC代码
#include<cstdio>#include<algorithm>#include<queue>using namespace std;struct Node{ int val; Node* left; Node* right; int level;};/// 将x插入到root中void insert(Node* &root,int x){ if(root== nullptr){ root = new Node; root->val = x; root->left = nullptr; root->right = nullptr; return; } if(root->val<x){ insert(root->right,x); }else{ insert(root->left,x); }}// 依据数组arr建树Node* createTree(int arr[],int n){ Node* root = nullptr; for(int i=0;i<n;++i){ insert(root,arr[i]); } return root;}int L[1000];// 每一层的节点个数int maxLevel = -1;void layerOrder(Node* root){ queue<Node*> que; root->level = 1; que.push(root); while(!que.empty()){ Node* t = que.front(); que.pop(); maxLevel = max(maxLevel,t->level); ++L[t->level]; if(t->left){ t->left->level = t->level + 1; que.push(t->left); } if(t->right){ t->right->level = t->level + 1; que.push(t->right); } }}int main() { int n; scanf("%d",&n); int initial[n]; for(int i=0;i<n;++i){ scanf("%d",&initial[i]); } Node* root = createTree(initial,n); layerOrder(root); printf("%d + %d = %d",L[maxLevel],L[maxLevel-1],L[maxLevel-1]+L[maxLevel]); return 0;}