博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
1115 Counting Nodes in a BST
阅读量:6987 次
发布时间:2019-06-27

本文共 1404 字,大约阅读时间需要 4 分钟。

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

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

代码:

#include 
#include
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
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

你可能感兴趣的文章
Linux命令(基本)
查看>>
实战Active Directory站点部署与管理,Active Directory系列之十二
查看>>
信息和知识
查看>>
7.2 函数的参数
查看>>
Flex + Servlet 实现断点上传
查看>>
Linux学习笔记之用户登录
查看>>
【Linux】第二章系统设置及基本操作
查看>>
docker-compose ,docker-stack
查看>>
Myeclipse10安装设置配置Aptana插件
查看>>
RHEL5.5安装中文支持
查看>>
web前端开发中浏览器兼容问题(五)
查看>>
H3C 交换机的基础配置
查看>>
小博老师解析Java核心技术 ——动态解析Jar的运用
查看>>
我的友情链接
查看>>
博为峰Java技术文章 ——JavaSE Swing BoxLayout布局管理器I
查看>>
HTML标记语言——文档标记设置
查看>>
memcached 常用命令及使用说明
查看>>
PC时代的20位英雄
查看>>
经典的MySQL 数据备份daemon程序
查看>>
腾讯云TDSQL审计原理揭秘
查看>>