小米笔试-二叉树

有一棵合法的二叉树,共有n个节点(1<=n<=1000),节点编号为(0~n-1),给定节点间的父子关系,求树的高度。

输入:第一行一个整数n,接下来有n-1行。每行两个整数,以空格分隔,第一个表示父节点编号,第二个表示子节点编号。

输出:树的高度

样例输入:

5
0 1
0 2
1 3
1 4
样例输出

3

这个题的关键是树的表示,其次是求树的高度:

(1)定义结构体用指针表示二叉树间节点关系

规规矩矩定义结点结构,构建一棵树,同时用指针数组存储下每个节点的地址,一遍为他添加孩子节点时能迅速找到。这个方法要完完整整写下来估计耗时不少。



(2)用数组表示

数组表示可能有多种,先说一维数组,当节点数目比较小时,可以考虑用完全二叉树的那种数组表示,2*n为左孩子,2*n+1为右孩子。但是有个巨大的问题是数组开多大,事实上当节点数为20的时候,数组就需要1024*1024这么大了,所以对于此题这种解法不可取(坑爹的我直接用的这个)

二维数组1001*2,我们可以用数组下标代表节点,每个节点2个单元,第一个单元表示左孩子下标,第二个单元表示右孩子单元。每次先存放左孩子单元

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值