求二叉树中节点的最大距离

《编程之美》给出了一种方法,但是它要为每个节点都保存一个最长左子树距离和最长右子树距离的字段。

我想到了另一种方法,就是为节点编码,根节点设为0,对于一个节点的左节点,它的编码是它的父亲节点的码后面加个0,对于一个节点的右节点,它的编码是它的父亲节点的码后面加个1,如果我们找到了叶子节点,就把为它编的码存在一个数组中。一次遍历完毕后,数组中就存在所有叶子节点的编码了,再将根节点的码也存在数组中。我们可以根据节点的码来求出两个节点间的距离。因为最大距离的两个节点一定是叶子节点或者叶子节点和根节点,因此只需比较存在数组中的码间的距离,就可以获得最大距离了。

 

汗,怎么每次说思路都说的糊里糊涂的。。。其实,只要画副图就明确了,自己画吧。。。

 

 

附上《编程之美》中的另一种解法

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值