码迷,mamicode.com
首页 > 其他好文 > 详细

1115 Counting Nodes in a BST

时间:2018-09-04 20:51:51      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:max   nod   std   order   数组   turn   设置   style   二叉搜索树   

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

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

标签:max   nod   std   order   数组   turn   设置   style   二叉搜索树   

原文地址:https://www.cnblogs.com/kkmjy/p/9588280.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!