c++编程题 树的高度

题目描述

现在有一棵合法的二叉树,树的节点都是用数字表示,现在给定这棵树上所有的父子关系,求这棵树的高度

输入描述:

输入的第一行表示节点的个数n(1 ≤ n ≤ 1000,节点的编号为0到n-1)组成,
下面是n-1行,每行有两个整数,第一个数表示父节点的编号,第二个数表示子节点的编号

输出描述:

输出树的高度,为一个整数

示例1

输入

5
0 1
0 2
1 3
1 4

输出

3

 

现学现卖啦.vector可真好用,万能。以后多多训练,嘻嘻。

#include<iostream>
#include<vector>
using namespace std;
int main(void){
  int n,H=1;
  int f,c,h;
  vector<int>node(1000,0);    //存放节点的有效高度
  node[0]=1;                    //至少有一个节点,高度值是1
  vector<int>child(1000,0);    //存放孩子节点数

  cin>>n;
  while(--n){                //n次循环读取
      cin>>f>>c;
      if(node[f]==0||child[f]==2) //如果父结点为空或其子节点已为2(剔除多余分支)
          continue;
      child[f]+=1;    
      h=node[f]+1;
      node[c]=h;
      if(h>H) H=h;
  }

     cout<<H;
    return 0;
}

更新:

今日又回顾了一下这道题,突然觉得似乎没有用vector的必要。因为题目已给出了n <= 1000,对于定长类型,用vector反而降低效率,不如直接用数组。如下:

#include<iostream>
#include<vector>
using namespace std;
int main(void){
  int n,H=1;
  int f,c,h;
  int node[1000];
  node[0]=1;
  int child[1000];

  cin>>n;
  while(--n){
      cin>>f>>c;
      if(node[f]==0||child[f]==2) 
          continue;
      child[f]+=1;
      h=node[f]+1;
      node[c]=h;
      if(h>H) H=h;
  }

     cout<<H;
    return 0;
}

果然,编译之后发现运行时间和占用内存都有所下降。

下面贴出使用矢量与直接使用数组的区别:

vector适用于多线程,比较安全,但速度比较慢
数组占用的资源更小,就像你用string和char 数组的道理是一样的用更底层的速度更快,方便性没写好的string好用而以而且要搞清楚一个关系,没有数组,哪来的向量
我再补充一点数组是栈上分配空间,vector是堆上分配空间
数组是C++语法里规定的基本数据类型。而vector本身并不是C++的一部分,是属于C++标准库提供的功能,是一群C++大牛们写出来的给C++菜鸟们使用的东东。如果你是大牛,那么你也可以写出一个东东来取代vector
动态内存管理,不易出错!
其实vector和数组一样,只能存储单一的数据类型,它的另一个主要的好处是可以动态的增长长度,
定义一个vector类型的变量时,并不需要指定它的容量是多少,如果有需要,只管往里面push数据。
vector会为你自动管理这些数据。
我们在程序中可能经常要用到数组,但有时候我们可能并不知道自己的程序中具体用到数组的大小(比如说,我们读一个文件记录,根据记录多少调整数组的大小,事先并不知道到底有多少记录),这种情况下,传统上是用动态数组实现的,这样不怎么安全.但有了vector我们就不必关心数组的大小,而直接声明为vector<type_name>array_name,其中,type_name为你要定义的数组类型,array_name为数组变量名,当你需要往数组中放数据时,只需要用如下格式array_name.push(要放入的数据),vector会自动调整数组大小,要减小数组大小,可以用如下格式array_name.pop();
至于效率,没怎么注意过,但是感觉数组效率应该比vector高,vector只是使用
起来比较方便。
数组的效率比Vector要高,Vector用起来要比数组方便。
楼上说的已经很好了!我在补充一点
数组在内存中分配的连续空间,多次分配释放后会有内存碎片,
而vectors是动态增长的,不是连续的,所以不会出现内存碎片
还有vector的迭代器能防止出现类似数组愈界等等 动态申请内存。
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值