[程序员代码面试指南]二叉树问题-二叉树节点间的最大距离问题(树形dp)

题意

如题。注,沿途的节点数只能经过一次,路径上的节点数叫做A到B的距离。

题解

  • 满足"依次求出每一个节点为根节点的二叉树的子树上的最大距离,那么最终答案一定在其中",所以可以使用树形dp。
  • 详细分析步骤按树形dp步骤来即可,简单。
    时间复杂度O(n)。

代码

class Type{
    int maxDis;
    int treeHeight;
    
    public Type(int maxDis,int treeHeight) {
        this.maxDis=maxDis;
        this.treeHeight=treeHeight;
    }
}

public class Main { 
    public static void main(String args[]) {
        //test
        Node n1=new Node(1);
        Node n2=new Node(2);
        Node n3=new Node(3);
        Node n4=new Node(4);
        Node n5=new Node(5);
        n1.left=n2;
        n1.right=n3;
        n3.left=n4;
        n3.right=n5;
        
        int maxDis=maxDistance(n1).maxDis;
        System.out.println(maxDis);
    }
    
    public static Type maxDistance(Node root) {
        if(root==null) {
            return new Type(0,0);
        }
        Type lMes=maxDistance(root.left);
        Type rMes=maxDistance(root.right);
        int disTemp=lMes.treeHeight+rMes.treeHeight+1;
        int maxDis=Math.max(Math.max(lMes.maxDis, rMes.maxDis), disTemp);
        int height=Math.max(lMes.treeHeight, rMes.treeHeight)+1;
        return new Type(maxDis,height);
    }
}

猜你喜欢

转载自www.cnblogs.com/coding-gaga/p/11033198.html