public class test20 { public static class Node{ public int value; public Node left; public Node right; public Node(int data){ this.value = data; } } //1.与x无关,找左树最大距离、高度和右树最大距离、高度 //2.与x有关,左树的高度+右树的高度+1 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); } public static int maxDistance(Node head){ return process(head).maxDistance; } }
给一个二叉树头节点,返回整棵树的最大距离(动态规划)
最新推荐文章于 2024-09-05 11:00:53 发布