PAT A1115 Counting Nodes in a BST [二叉搜索树]

题目描述

链接
输出一个二叉搜索树的最后两层结点个数a和b,以及他们的和

分析

  • 用链表存储,建立,注意一定记住insert &加引用,以及root=NULL时新建结点的几个操作
  • dfs求cnt[layer]
#include<bits/stdc++.h>
using namespace std;

struct node{
    int data;
    node *lchild, *rchild;
};
const int maxn = 1e3+5;
int a[maxn], n;
void insert(node *&root, int x){
    if(!root){
        root = new node;
        root->data = x;
        root->lchild = NULL;
        root->rchild = NULL;
        return;
    }
    if(x > root->data) insert(root->rchild, x);
    else insert(root->lchild, x);
}

node *create(){
    node *root = NULL;
    for(int i=0;i<n;i++){
        insert(root, a[i]);
    }
    return root;
}
int cnt[maxn],maxlayer;
void dfs(node *root, int layer){
    if(!root) return;
    cnt[layer]++;
    if(maxlayer < layer) maxlayer = layer;
    dfs(root->lchild, layer+1);
    dfs(root->rchild, layer+1);
}

int main(){
    cin>>n;
    for(int i=0;i<n;i++) cin>>a[i];
    node *root = create();
    dfs(root, 0);
    int ans = cnt[maxlayer] + cnt[maxlayer-1];
    cout<<cnt[maxlayer]<<" + "<<cnt[maxlayer-1]<<" = "<<ans<<endl;
}

猜你喜欢

转载自www.cnblogs.com/doragd/p/11289082.html
今日推荐