二叉树的最大距离(递归套路)

给定一棵二叉树的头结点head,任何两个节点之间都存在距离,返回整颗二叉树的最大距离(每个结点只经过一次)

class max{
    public static int maxDistance(Node head){
        return process(head).maxDistance;
    }
    public static class Info{
        public int maxDistance;
        public int height;

        public Info(int dis,int h){
            maxDistance = dis;
            height = h;
        }
    }

    public static Info process(Node X){
        if(X == null){
            return new Info(0,0);
        }
        Info leftInfo = process(X.left);
        Info rightInfo = process(X.right);
        int height = Math.max(leftInfo.height,rightInfo.height) + 1;
        int maxDistance = Math.max(Math.max(leftInfo.maxDistance,rightInfo.maxDistance),
            leftInfo.height + rightInfo.height + 1);
        return new Info(maxDistance,height);
    }
}

二叉树递归的套路
1.假设以X节点为头,假设可以向X左树和X右树要任何信息
2.在上一步的假设下,讨论以X为头结点的树,得到答案的可能性
3.列出所有可能性好,确定到底需要向左树和右树要什么样的信息
4.把左树信息和右树信息求全集,就是任何一颗子树都需要返回的信息S
5.递归函数都返回S,每一颗字树都这样要求
6.写代码,在代码中考虑如何把左树的信息和右树的信息整合出整颗树的信息。

本题最大距离有两种情况
1.和X节点无关,那么最大距离一定是左树的最大距离或者是右树的最大距离
2.和X节点有关,那么最大距离一定是左子树的高度 + 1 + 右子树的高度
本道题对左树和右树要的信息是一样的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值