1115 Counting Nodes in a BST

本文介绍了一种在二叉搜索树中记录各层节点数量的方法,并通过层序遍历来确定树的最后两层节点总数。利用队列实现层序遍历,为每个节点添加一个表示其所在层次的数据域。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

思路:在树结点中增加一个数据域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;    
} 

 

转载于:https://www.cnblogs.com/kkmjy/p/9588280.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值