[LeetCode]バイナリツリーの543直径

バイナリツリーの直径。質問の意味は、バイナリツリー内部の最大直径を見つけ、バイナリツリーを与えることです。これは、最大径が任意の二つのノード間の最大距離で定義します。例、

バイナリツリーを考えます

          1
         / \
        2 3
       / \     
      4 5    

 

経路の長さであるリターン3、[4,2,1,3]又は[5,2,1,3]。

この最大距離はルートなし可能性があることに注意してくださいは、図中の以下の実施例は、最大径は、9-8である中国のネットワークLCから採取します

アイデアはに似ている104タイトルに使用再帰バイナリーツリーの最大の深さを見つけるために、少しいくつかの変更を行います。左部分木の最大の深さのレコードがグローバル変数RES最大長を設定し、再帰関数は、まだ解像度の最大深レコードを探していますがMath.max(RES、右+左)とされ 、 現在のノードの右部分木+最大深さです。

時間O(N)

スペースO(n)は、

Java実装

1  クラスソリューション{
 2つ     のint RES = 0 3  
4      公共 INT diameterOfBinaryTree(ツリーノードのルート){
 5          ヘルパー(ルート)。
6          リターンのres;
7      }
 8  
9      プライベート int型ヘルパー(ツリーノードのルート){
 10          であれば(ルート== NULL ){
 11              リターン 0 12          }
 13          INTは =左(root.left)ヘルパー。
14          INT右= ヘルパー(root.right)。
15         RES = Math.max(RES、+左、右)。
16          リターン Math.max(左、右)+ 1 17      }
 18 }

 

JavaScript実装

1  / * *
 2  * @param {ツリーノード}ルート
 3  * @return {数}
 4   * / 
5  のvar diameterOfBinaryTree = 関数(ルート){
 6つの      LETのRES = 0 7      VaRのヘルパー= 関数(ルート){
 8          であれば(ルート== NULL ){
 9              戻り 0 ;
10          }
 11          LETは=左(root.left)ヘルパー。
12は          右=聞かせヘルパー(root.right)。
13の          RES = Math.max(RES、左+正しい);
14          リターン Math.max(左、右)+ 1 15      }。
16      ヘルパー(ルート)。
17      リターンのres;
18 }。

 

おすすめ

転載: www.cnblogs.com/aaronliu1991/p/12515089.html