543-バイナリツリー径

我々は下方にそのノードLの最大数(サブツリー深さの根の、すなわち、左息子)を通過した後、ノードの左側の子および右側の子は(すなわち右息子に最もノードRを介して下方にトラバースされることを知っていると仮定サブツリーのルートの深さ)は、そのノードへのパスの始点ノードの最大数を通過するときには、L + R + 1であります

我々は、パスの開始点として、ノードノードは、ノードの最大数通過注意するバイナリツリーの直径は、すべてのノードdnodeマイナス1の最大値であり、dnodeあります。

最終的アルゴリズム処理:我々は定義再帰関数の深さ(ノード)関数は、サブツリーのルートのノード計算dnode深度を返します。左右の息子息子深さLとRRに再帰呼び出しは、決定されたサブツリーのルートであるサブツリーのルートノードの深さ、MAX(L、R)+1であり; dnodeのノードの値であります L + R + 1  再帰的にすべてのノードを検索し、グローバル変数レコードANS設定  dnode 最も大きな値を、そして最終的にANS-1を返すには、木の直径です。

リンクします。https://leetcode-cn.com/problems/diameter-of-binary-tree/solution/er-cha-shu-de-zhi-jing-by-leetcode-solution/

1  / * *
 2  分木のノードのための*の定義。
3  *構造体のTreeNode {
 4  * INTヴァル。
5  *のTreeNode *左;
6  *のTreeNode *右;
7  *ツリーノード(INT X):ヴァル(x)は、左(NULL)、右(NULL){}
 8  *}。
9   * / 
10  クラスソリューション{
 11  公共12      int型の長さ= 0 13      INT diameterOfBinaryTree(ツリーノード* ルート){
 14          の深さ(ルート)。
15          戻り長。
16      }
 17      int型の深さ(ツリーノード* ルート)
 18      {
 19          のint L =深さ(root-> 左)。
20          のint R =深さ(root- 右)。
21          長さ= MAX(L + R、長さ)。
22          リターン MAX(L、R)+ 1 23      }
 24 }。
コードの表示

 

おすすめ

転載: www.cnblogs.com/nxnslc-blog/p/12459851.html