Diameter of Binary Tree - Better Design

前端 未结 11 2060
闹比i
闹比i 2020-12-23 15:14

I have written a code for finding diameter of Binary Tree. Need suggestions for the following:

  1. Can I do this without using static variable at class level?
11条回答
  •  盖世英雄少女心
    2020-12-23 15:48

    The diameter of a tree T is

    Diameter(T) = max( Diameter(T.left), Diameter(T.right), Height(T.left)+Height(T.right)+1 )

     private class Data {  
       public int height;  
       public int diameter;  
     }  
    
     private void diameter(TreeNode root, Data d) {  
       if (root == null) {  
         d.height = 0; d.diameter = 0; return;  
       }  
       diameter(root.left, d); // get data in left subtree  
       int hLeft = d.height;  
       int dLeft = d.diameter;  
       diameter(root.right, d); // overwrite with data in right tree  
       d.diameter = Math.max(Math.max(dLeft, d.diameter), hLeft+d.height+1);  
       d.height = Math.max(hLeft, d.height) + 1;  
     }  
    
     public int diameter(TreeNode root) {  
       Data data = new Data();  
       diameter(root, data);  
       return data.diameter;  
     }  
    

提交回复
热议问题