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(ルート)。
解像度を返します。
}
アイデア:現在のノードの左の部分木を深さに追加され、トラバースの深さは、パス内のすべてのノードの最大値によって決定さ