二分木
-
ルートノード(root)は最上位ノードです
-
開始ノードから終了ノードの経験豊富なエッジまでのパス(パス)
-
ルートノードを除いて、各親ノードはその親ノードです
-
子(子)エッジが指す下のノードの各ノード
-
兄弟は同じ父親を持ち、同じノードにいます
-
サブツリー(サブツリー)各ノードには、そのすべての子孫で構成されるサブツリーが含まれます
-
リーフノード(リーフノード)子のないノードが子ノードになります
バイナリツリーは単純で一般的に使用される構造であり、各ノードには2つの子が含まれます
バイナリツリー関連の概念 -
ノードの深さ(深さ)ノードに対応するレベルの数
-
木の高さ(高さ)レベルはゼロから計算されるため、二分木の高さはレベル番号+1です。
-
数の幅(幅)二分木の幅は、ノードレベルが最大のノードの数を指します。
完全な二分木:各内部ノード(非リーフノード)に2つの子が含まれている場合、完全な二分木になります。 、
完全な二分木:すべてのリーフノード、すべて同じレベル。
完全な二分木:高さhの完全な二分木はh-1に縮小され、下のスロットは左から右に埋められます。これは
、完全な二分木。実際、リンクされたリスト、1つのノードといくつかの類似点があります。二分木を
トラバースするには、子のポインタを保存する必要があります。 -
最初のルート順序トラバーサル:最初にルートを処理し、次に左側のサブツリーと右側のサブツリーを処理します
-
中根順走査:左サブツリー、処理ルート、右サブツリー
-
ルート後の順序トラバーサル:左サブツリー、右サブツリールート
#节点
class BSTNode(object):
def __init__(self,key, value,right = None,left = None):
self.key, self.value,self.right,self.left = key, value , right , left
class BinTree(object):
def __init__(self,root = None):
self.root = root
@classmethod
def build_from(cls,node_list):
"""
通过节点信息构造二叉树
第一次遍历我们的构造 node 节点
第二次遍历给root 和 孩子值
最后我们用root 初始化这个类并返回一个对象
"""
#创建一个空字典
node_dict = {}
#遍历list
for node_data in node_list:
data = node_data['data']
#实例化节点,赋值给字典
node_dict[data] = BSTNode(data)
#第二层次遍历list
for node_data in node_list:
data = node_data['data']
node = node_dict[data]
if node_data['is_root']:
root = node
node.left = node_dict.get(node_data['left'])
node.right = node_dict.get(node_data['right'])
#返回BinTree对象
return cls(root)