Pythonアルゴリズムシリーズ深度の最初のトラバーサルアルゴリズム[バイナリツリー]

ここに画像の説明を挿入
这不就是二叉树吗?嗯,风景都在提示我该学学二叉树了

1.深さ優先トラバーサルとは

深さ優先トラバーサルアルゴリズムは、古典的なグラフ理論アルゴリズムです。特定のノードから検索を開始するv。ノードのすべてのエッジがトラバースされるまで検索を続行します。ノードvのすべてのエッジがトラバースされると、深さ優先トラバーサルアルゴリズムは、このノードの検索を続行するためにv先行ノードに戻る必要があります。
:深さ優先のトラバーサル問題は、ルールに従ってすべての可能な方法を試行する必要があります。

2、二分木

1.バイナリツリーの概要

バイナリツリーは特別なデータ構造であり、一般的なデータ構造には、配列、リンクリスト、グラフ、キュー、ハッシュテーブル、ツリーなどがあります。二分木はツリー構造に属し、二分木の各ノードには、左サブツリーと右サブツリーと呼ばれる2つのブランチがあります。二分木の各レベルは最大で 2 1 (2 ^ n-1) ノード。通常のツリーとは異なり、通常のツリーのノードには分岐制限がありません。通常のツリーのノードは、左右のツリーとサブツリーに分割されていません。

2.二分木タイプ

バイナリツリータイプ:空のバイナリツリー、完全なバイナリツリー、完全なバイナリツリー、完全なバイナリツリー、バランスのとれたバイナリツリー。

  • 空の二分木:ノードがゼロです
  • 完璧な二分木:ノードのすべての層は二分木でいっぱいです(図1の例のように)
  • 完全な二分木:各ノードにはゼロまたは2つの子ノードがあります
  • 完全な二分木:最後のレイヤーを超えると、各レイヤーのノードはいっぱいになり、最後のレイヤーのノードはすべて左から配置されます
  • 平衡二分木:各ノードの2つのサブツリーの深さは、1を超えて差はありません。
    ここに画像の説明を挿入
    ここに画像の説明を挿入
    :完全二分木と完全二分木の定義は、中国では同じです
3.二分木関連用語
用語 説明する
学位 ノードの次数は、ノードのサブツリーの数です
葉ノード ゼロ次のノード
分岐ノード 非ゼロ度のノード
子ノード ノードの下の2つの子ノード
親ノード ノードの1レベル上のソースノード
兄弟ノード 同じ親ノードを持つノード
ルート 二分木のソースノード
奥行き 二分木のノードの層の数
4.二分木のノードコード

各ノードには2つの子ノードが接続されているため、バイナリツリーでノードを検索するにはルートノードのみが必要であり、各ノードの定義は同じです

class Node : #二叉树节点定义
	def  _init_(self,x):
		self.val = x #节点值
		self.left = None #左侧子节点
		self.right = None #右侧子节点

5.二分木探索順序

バイナリツリーの3つの走査形式:

  • DLR(最初の注文):
  • LDR(中間注文):
  • LRD(後順):
    :Lは左側のサブツリーを表し、Rは右側のサブツリーを表し、Dはルートを表します
    ここに画像の説明を挿入
6.深さ優先トラバーサルと幅優先トラバーサル
  • 深さ優先トラバーサル:プレオーダー、ミドルオーダー、ポストオーダーはすべて
    、ルートノードから最も遠いノードへの深さ優先トラバーサルです
  • 幅優先トラバーサル:最初に、例のルートノードの最も近いノードにアクセスし、レイヤーに進みます。幅優先で上の画像をトラバースする順序は、1-2-3-4-5-6-7です。

3.面接の質問+インスピレーション

ペンギンO&Mインタビューの質問
1.バイナリツリートラバーサルシーケンス:上記を参照
2.使い慣れた言語でバイナリツリーを作成する方法を教えてください。python上記参照
追いつくために一生懸命勉強する

元の記事を85件公開 賞賛された709件 70,000回の閲覧

おすすめ

転載: blog.csdn.net/weixin_42767604/article/details/105508993