PAT1115 Counting Nodes in a BST 二叉搜索树最后两层结点数量

传送门

二叉搜索树 (BST) 递归定义为具有以下属性的二叉树:

  • 若它的左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值
  • 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值
  • 它的左、右子树也分别为二叉搜索树

将一系列数字按顺序插入到一个空的二叉搜索树中,然后,请你计算结果树的最低两层的结点个数。

输入格式

第一行包含整数 N,表示插入数字序列包含的数字个数。

第二行包含 N 个整数,表示插入数字序列。

输出格式

以如下格式,在一行中,输出结果树的最后两层的结点数:

n1 + n2 = n

n1 是最底层结点数量,n2 是倒数第二层结点数量,n 是它们的和。

数据范围

1≤N≤1000
−1000≤插入数字 ≤1000。

输入样例:

9
25 30 42 16 20 20 35 -5 28

输出样例:

2 + 4 = 6

思路:每插入一个结点,从根节点开始遍历,判断是否小于等于(大于)当前节点的值,如果当前节点已经有左(右)子树了,就向下遍历,直到找到个节点可以作为他的左右子节点,顺便记录一下最大深度 

坑点:测试点5 如果只有一个结点的情况 输出 1 + 0 = 1

#include
#define rep(i,a,n) for(int i=a;ia[root]){
        if(r[root]==-1){
            r[root]=i;
            d[depth]++;
            mxd=max(depth,mxd);
            return ;
        }
        else add(r[root],i,depth+1);
    }
}
int main(){
    cin>>n;
    memset(l,-1,sizeof(l));
    memset(r,-1,sizeof(r));

    rep(i,0,n) cin>>a[i];
    d[0]++;
    if(n==1){ //测试点5
        cout<<"1 + 0 = 1"<

你可能感兴趣的:(树,PTA)