LeetCodeブラシエッセイの質問1

LeetCode 574

 

バイナリツリーを考えると、あなたはその直径の長さを計算する必要があります。バイナリツリーは、経路長の任意の2つのノードの直径の最大長さです。このパスはルートを通過してもよいです。

例:
指定したバイナリツリー

1
/ \
23
/ \
45の
経路長[4,2,1,3]又は[5,2,1,3]である戻り3、。

注:2つのノード間の経路長がその間エッジの数で表されます。

1.木の最大の深さを求めます

INT diameterOfBinaryTree(構造体のTreeNode *ルート){
    (ルート== NULL)の場合
        0を返します。
    それ以外の場合(root->左== NULL && root->右== NULL)//単にツリーノード
        1を返します。
    INT left_hight = diameterOfBinaryTree(root->左)。
    int型right_hight = diameterOfBinaryTree(root->右)。
    もし(left_hight> right_hight)
        リターンleft_hight + 1;
    そうしないと
        リターンright_hight + 1;
}

任意の2つのノード2はDFSトラバーサルを結合し、ツリーの最大深さを求めて、ツリー要求間の最大径

/ **
 *バイナリツリーノードの定義。
 *構造体のTreeNode {
 * int型のval;
 *構造体のTreeNode *左;
 *構造体のTreeNode *右;
 *}。
 * /
int型のres; //グローバル変数のレコード路長が、ここで0に設定されています
int型DFS(構造体のTreeNode *ルート)
{
    (ルート== NULL)の場合
        0を返します。
    もし(root-> == NULL && root->右== NULL左)
        1を返します。  
    INTは左= DFS(root->左)。
    int型の右= DFS(root->右)。
    ?RES = RES> RES(右+左):右+左。
    リターン(右から左>左:?右)+1; //現在のノードの深さを返します。
}

//は、2の最大を返し、左と右の部分木の高さのために変換することができます
INT diameterOfBinaryTree(構造体のTreeNode *ルート){
  (ルート== NULL)の場合
    0を返します。   
  RES = 0; //ここで何か違い0を設定するには?
  INT長= DFS(ルート)。
  解像度を返します。
}

アイデア:現在のノードの左の部分木を深さに追加され、トラバースの深さは、パス内のすべてのノードの最大値によって決定さ

 

おすすめ

転載: www.cnblogs.com/iris-lin/p/12342954.html