1115 Counting Nodes in a BST

Posted kkmjy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1115 Counting Nodes in a BST相关的知识,希望对你有一定的参考价值。

题意:给出一棵二叉搜索树的插入序列,要求该树最后两层的结点个数。

思路:在树结点中增加一个数据域layer,表示该结点所在的层次。另外,设置数组level[]和变量maxLevel,level[i]表示第i层的结点个数,maxLevel表示树的最大层次,在层序遍历时更新即可。

代码:

#include <cstdio>
#include <queue>
using namespace std;
int level[1005]={0};
int maxLevel=0;

struct Node{
    int val;
    int layer;
    Node *lchild,*rchild;
    Node(int v):val(v),layer(1),lchild(NULL),rchild(NULL){} 
};

void insert(Node* &root,int val)
{
    if(root==NULL) {
        root=new Node(val);
        return;
    }
    if(val<=root->val) insert(root->lchild,val);//根据题意,这里是<=,要仔细!
    else insert(root->rchild,val);
}

void levelOrderTraversal(Node* root)
{
    queue<Node*> q;
    root->layer=1;
    q.push(root);
    while(!q.empty()){
        Node* pNode=q.front();
        q.pop();
        level[pNode->layer]++;
        if(pNode->layer > maxLevel) maxLevel=pNode->layer;
        if(pNode->lchild){
            pNode->lchild->layer=pNode->layer+1;
            q.push(pNode->lchild);
        }
        if(pNode->rchild){
            pNode->rchild->layer=pNode->layer+1;
            q.push(pNode->rchild);
        }
    } 
}

int main()
{
    int n,v;
    scanf("%d",&n);
    Node* root=NULL;
    while(n--){
        scanf("%d",&v);
        insert(root,v);
    }
    levelOrderTraversal(root);
    printf("%d + %d = %d",level[maxLevel],level[maxLevel-1],level[maxLevel-1]+level[maxLevel]);
    return 0;    
} 

 

以上是关于1115 Counting Nodes in a BST的主要内容,如果未能解决你的问题,请参考以下文章

PAT 1115 Counting Nodes in a BST

1115 Counting Nodes in a BST

[二叉查找树] 1115. Counting Nodes in a BST (30)

PAT Advanced 1115 Counting Nodes in a BST (30分)

1115 Counting Nodes in a BST

PAT A 1115. Counting Nodes in a BST (30)二叉排序树