深さ優先トラバーサルアルゴリズムの二分木
这不就是二叉树吗?嗯,风景都在提示我该学学二叉树了
1.深さ優先トラバーサルとは
深さ優先トラバーサルアルゴリズムは、古典的なグラフ理論アルゴリズムです。特定のノードから検索を開始するv。ノードのすべてのエッジがトラバースされるまで検索を続行します。ノードvのすべてのエッジがトラバースされると、深さ優先トラバーサルアルゴリズムは、このノードの検索を続行するためにv先行ノードに戻る必要があります。
注:深さ優先のトラバーサル問題は、ルールに従ってすべての可能な方法を試行する必要があります。
2、二分木
1.バイナリツリーの概要
バイナリツリーは特別なデータ構造であり、一般的なデータ構造には、配列、リンクリスト、グラフ、キュー、ハッシュテーブル、ツリーなどがあります。二分木はツリー構造に属し、二分木の各ノードには、左サブツリーと右サブツリーと呼ばれる2つのブランチがあります。二分木の各レベルは最大で
ノード。通常のツリーとは異なり、通常のツリーのノードには分岐制限がありません。通常のツリーのノードは、左右のツリーとサブツリーに分割されていません。
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上記参照