543バイナリツリー径
バイナリツリーを考えると、あなたはその直径の長さを計算する必要があります。バイナリツリーは、経路長の任意の2つのノードの直径の最大長さです。このパスはルートを通過してもよいです。
例:
指定したバイナリツリー
1
/ \
2 3
/ \
4 5
経路長[4,2,1,3]又は[5,2,1,3]であるリターン3、。
注:2つのノード間の経路長がその間エッジの数で表されます。
思考
DFSの深さは、各ノードのすべてのノードをトラバースするのに必要な、次いで深さに応じて最大直径を更新します。
非常に私が直接メインで深さ(ルート)の後に復帰して、グローバル変数の初期化を宣言し始めます。
しかし、このユースケースは、渡すことができませんでしたされています。
私は何をこの手段の空の木を知らない、私はdiameterOfBinaryTree(ゼロ)の結果が0のテストに従って、どのように間違っている、これは3ああ、混乱この出力されません。
事件を解決します:
var(
maxDiameter=0
)
func diameterOfBinaryTree(root *TreeNode) int {
depth (root )
return maxDiameter
}
私は、これは、それが宣言されたときにのみ、グローバル変数が初期化されていることを定義し、使用maxDiameter、してくださいノートで始まりました。そしてleetcodeプログラムの実施形態で使用される一連の試験を、そう値はユースケースの端部にmaxDiameter実施形態maxDiameterで使用される次の初期値です。
このようなエラーを回避するために、私たちは、それぞれが最大直径を求める前に初期化する必要があります。
もちろん、あなたも深さ(ルート*のTreeNode、* maxDiamで最大半径を記録するためにこの方法を選択することができ INT)、 この質量の参加と、この問題を回避する方法を。
私の答え
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
var(
maxDiameter int
)
func diameterOfBinaryTree(root *TreeNode) int {
maxDiameter=1
depth (root )
return maxDiameter-1
}
func depth (root *TreeNode) int{
if root==nil{
return 0
}
left:=depth(root.Left)
right:=depth(root.Right)
if left+right+1>maxDiameter{
maxDiameter=left+right+1
}
if left>right{
return left+1
}else{
return right+1
}
}