"BinaryTree" (データ構造)
"BinaryTree"
各ノードに保存される値が一般式である可変二分木を表す.
詳細
- 二分木は,各ノードに関連付けられたデータに基づくノードを評価するためだけでなく,2つまでの枝との階層関係を表すためにも役立つ.
-
CreateDataStructure["BinaryTree",v] 指定された初期値 v を持ち,左と右に子を持たない新しい"BinaryTree"を作成する CreateDataStructure["BinaryTree",v{l,r}] 指定された初期値 v と指定された左と右の子を持つ新しい"BinaryTree"を作成する Typed[x,"BinaryTree"] x に"BinaryTree"型を与える - "BinaryTree"型のデータ構造については,以下の演算が使える.
-
ds["BreadthFirstScan",f] ds の幅優先探索を行い,各ノードのデータを f に渡す time: O(n) ds["Copy"] ds のコピーを返す time: O(n) ds["Data"] 木のノード ds に保存されたデータを返す time: O(1) ds["InOrderScan",f] ds の間順探索を行い,各ノードのデータを f に渡す time: O(n) ds["Left"] ds の左の子のデータ構造を返す time: O(1) ds["LeftNullQ"] ds の左の子が空値である場合にTrueを返す time: O(1) ds["NullQ"] ds が空値である場合にTrueを返す time: O(1) ds["PostOrderScan",f] ds の後順探索を行い,各ノードのデータを f に渡す time: O(n) ds["PreOrderScan",f] ds の前順探索を行い,各ノードのデータを f に渡す time: O(n) ds["Right"] ds の右の子のデータ構造を返す time: O(1) ds["RightNullQ"] ds の右の子が空値である場合にTrueを返す time: O(1) ds["SetData",v] 木のノード ds に保存されたデータを v に設定する time: O(1) ds["SetLeft",l] 木のノード ds の左の子を l に設定する time: O(1) ds["SetRight",r] 木のノード ds の右の子を r に設定する time: O(1) ds["ValidQ"] ds が有効な木である場合にTrueを返す time: O(n) ds["Visualization"] ds の可視化を返す time: O(n) - 以下の関数もサポートする.
-
dsi===dsj dsi が dsj に等しい場合はTrue FullForm[ds] ds の完全形 Information[ds] ds についての情報 InputForm[ds] ds の入力形 Normal[ds] ds を通常の式に変換する
例題
すべて開くすべて閉じる例 (2)
新しい"BinaryTree"は,CreateDataStructureを使って作成できる:
スコープ (1)
情報 (1)
新しい"BinaryTree"は,CreateDataStructureを使って作成することができる:
アプリケーション (7)
二分探索木 (1)
木の回転 (1)
最下位共通先祖を求める (1)
二分木が対称であるかどうかを検証する (1)
考えられる問題 (2)
空ノード (1)
空ノードの内容に対して作用する演算を行うとエラーが発生する:
空ノードのシリアライゼーションはNullである:
CreateDataStructureで空ノードを作成する:
Wolfram言語における空ノードの表現は,ノードが空であるかどうかをチェックしなくても,二分木のノードを操作するアルゴリズムを書くことが可能となるので,大変便利である.