543バイナリツリーの毎日の問題DFS直径Golangの深さ優先探索

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
	}
}
公開された38元の記事 ウォンの賞賛0 ビュー1033

おすすめ

転載: blog.csdn.net/Cyan1956/article/details/104769421
おすすめ