バイナリ ツリーの反転 golang
バイナリ ツリーの反転はアルゴリズムに関する古典的な質問であり、インタビューでもよく聞かれます。この記事では、バイナリツリーを反転する golang プログラムを実装します。
バイナリ ツリーとは
バイナリ ツリーは、ルート ノードを含む限られたノードのセットで構成され、各ノードがそれぞれ左側と右側の子に接続されたツリー構造です。 .ノード。すべてのノードに左右の子ノードがない場合、そのツリー構造は二分木と呼ばれます。
golang では、バイナリ ツリー ノードを表すために構造体がよく使用されます。例:
type TreeNode struct {
Val int Left *TreeNode Right *TreeNode
}
上記のコードを使用してバイナリ ツリー ノードを定義します。Val はノードの値を表し、Left はノードの値を表します。 Right は左側の子ノードを表し、Right は右側の子ノードを表します。
バイナリ ツリーを反転する方法
バイナリ ツリーを反転する問題は単純に見えますが、実際にはいくつかの複雑な問題が含まれています。説明の便宜上、次のような二分木があると仮定します。
4
/ \
2 7
/ \ 6 9
反転後の二分木は次のようになります。
4
/ \
7 2
/ \
9 6
コードの実装に関しては、再帰的メソッドを使用してこの問題を解決できます。再帰的メソッドは、構造体のポインタを直接使用して、左右の子ノードの位置を交換できます。再帰メソッドのコードは次のとおりです。
func invertTree(root TreeNode) TreeNode {
if root == nil { return nil } root.Left, root.Right = invertTree(root.Right), invertTree(root.Left) return root
}
invertTree という名前の関数を宣言します。 , この関数は、バイナリ ツリーのルート ノードへのポインタをパラメータとして受け取り、反転された新しいバイナリ ツリーへのポインタを返します。ルートノードが空の場合は nil が返されます。
関数本体内では、ルートノードの左側の子ノードと右側の子ノードを交換し、この処理を子ノードに再帰的に適用してバイナリツリーを反転する処理を再帰的に実行しています。 。
最後に、反転された新しいバイナリ ツリーのルート ノード ポインタを返します。
完全なコードは次のとおりです:
package main
import "fmt"
type TreeNode struct {
Val int Left *TreeNode Right *TreeNode
}
func invertTree(root TreeNode) TreeNode {
if root == nil { return nil } root.Left, root.Right = invertTree(root.Right), invertTree(root.Left) return root
}
func main() {
root := &TreeNode{Val: 4, Left: &TreeNode{Val: 2}, Right: &TreeNode{Val: 7, Left: &TreeNode{Val: 6}, Right: &TreeNode{Val: 9}}} fmt.Println("Before invert: ") fmt.Println(root.Val, root.Left.Val, root.Right.Val, root.Right.Left.Val, root.Right.Right.Val) invertTree(root) fmt.Println("After invert: ") fmt.Println(root.Val, root.Left.Val, root.Right.Val, root.Left.Left.Val, root.Left.Right.Val)
}
at この例では、最初にバイナリ ツリーのルート ノードを定義します。 main 関数では、invertTree 関数を呼び出してバイナリ ツリーを反転します。最後に、反転前後の二分木を出力します。
結論
この記事では、二分木を反転する方法についての golang プログラムを紹介しました。単純な再帰関数を使用することで、私たちのプログラムはこの問題をうまく解決できます。この記事がバイナリ ツリー反転の問題と golang 言語の使用を誰もが理解するのに役立つことを願っています。
以上がバイナリツリーを反転する golang プログラムを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

gohandlesinterfacesandtypeassertionseffectivivivivivity、強化された柔軟性と耐毒性を強化します

言語エラー処理は、エラーとエラーを介してより柔軟になり、読みやすくなります。 1.エラーは、エラーが指定されたエラーと同じであり、エラーチェーンの処理に適しているかどうかを確認するために使用されます。 2.エラー。エラータイプを確認するだけでなく、エラーを特定のタイプに変換することもできます。これは、エラー情報を抽出するのに便利です。これらの関数を使用すると、エラー処理ロジックを簡素化できますが、エラーチェーンの正しい配信に注意を払い、コードの複雑さを防ぐために過度の依存性を回避できます。

tomakegogoapplicationsRunfasterAndMore -efficient、useprofilingtools、leverageconconcurrency、andmanagememoryefcectively.1)useprofforcpuandmemoryprofilingtoidentififybottlenecks.2)

go'sfutureisbrightwithtrendslikeRikeRovedTooling、generics、cloud-nativeadoption、performulenhancements、andwebassemblyintegration、butchallengesincludemaintainingsimplicitandimplovingeror handling。

GoroutinesAreSareSareSareSormethodSthaturncurlyntingo、Enableing and LightweightConcurrency.1)theyRuntimeSimeSingMultiplexing、SountyStorunonFeweroSthReads.2)ゴルチンズを失ったことを許可します

initistoistoInitializevariables、setupconutupurations、orforformndexedarysetupbe foreThemainfunctionexecutes.useinitby:1)inginginyourcodeTorunautorunaintalunain、2)KeepingItshortandpocusedonsimpletasks、3)ConsididiriveSusinginsingingingingingingingingingingingingingingingingingingingingingingsingpltassksを使用すると、

go interfacesaremethodsignaturesetsetsattypesmustimplement、unableingpolymorphism withintinheritance forcleaner、modularcode.theyareimplictilistifisisfiestified、houseforfflexibleapisanddeaupling、busrecarefulusoavoidoidoimoidimeerrororsypertety。

Goで回復()関数を使用して、パニックから回復します。特定の方法は次のとおりです。1)回復()を使用して、延期関数でパニックをキャプチャして、プログラムのクラッシュを避けます。 2)デバッグの詳細なエラー情報を記録します。 3)特定の状況に基づいてプログラムの実行を再開するかどうかを決定します。 4)パフォーマンスに影響を及ぼさないように注意して使用します。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

ホットトピック









