网站开发与设计中学生,大连百度推广代理商,谷歌广告优化,电子政务门户网站建设的教训长子兄弟链存储结构#xff08;孩子兄弟链存储结构#xff09;解释#xff1a; 长子兄弟链存储结构是一种树的存储结构#xff0c;它使用孩子兄弟表示法#xff08;也称作左孩子右兄弟表示法#xff09;来表示树的结构。这种表示方法主要用于存储一般的树#xff0c;而不…长子兄弟链存储结构孩子兄弟链存储结构解释 长子兄弟链存储结构是一种树的存储结构它使用孩子兄弟表示法也称作左孩子右兄弟表示法来表示树的结构。这种表示方法主要用于存储一般的树而不是二叉树。 在长子兄弟链存储结构中树中的每个节点都有两个指针一个指向它的第一个孩子节点另一个指向它的右边兄弟的节点。这种表示方法使用了类似链表的结构使得树的每个节点可以灵活地连接到它的子节点和兄弟节点。 使用长子兄弟链存储结构可以有效地表示任意形状的树而且在进行树的遍历和操作时也相对容易。这种存储结构的主要优点是节省空间因为不需要额外的指针来表示左右子树同时也便于实现树的各种操作如插入、删除和查找等。长子兄弟链存储结构在树的应用中具有一定的灵活性和效率。 代码
class BENode():def __init__(self,data,sonNone,brotherNone):self.datadataself.sonsonself.brotherbrotherclass BEStree():def __init__(self):self.data[]# 建立根节点,并存储在self.data中def create_t(self,e):a BENode(e)self.data.append(a)# 建立节点与节点之间关系,并存储在self.data中,brother的存储优先级son的存储优先级(增加节点)def create_other(self,i,sonNone,brotherNone):#i为节点的下标if son!None:s BENode(son)self.data.append(s)self.data[i].son sif brother!None:b BENode(brother)self.data.append(b)self.data[i].brotherb# 删除节点值def delx(self,e):for i in range(len(self.data)):# 从节点属性删除节点值if self.data[i].brother ! None:if self.data[i].brother.datae:self.data[i].brother.dataNonebreakif self.data[i].son ! None:if self.data[i].son.datae:self.data[i].son.dataNonebreakfor i in range(len(self.data)):# 从存储结构删除if self.data[i].datae:self.data[i].dataNonebreak#修改节点值,将e修改为n_edef change(self,e,n_e):for i in range(len(self.data)):# 从节点属性修改节点值if self.data[i].brother!None:if self.data[i].brother.datae:self.data[i].brother.datan_ebreakif self.data[i].son ! None:if self.data[i].son.datae:# 从存储结构修改self.data[i].son.datan_ebreakfor i in range(len(self.data)):if self.data[i].datae:self.data[i].datan_ebreak# 查询节点值,返回节点def find(self,e):for i in range(len(self.data)):if self.data[i].datae:return self.data[i]#先序遍历,传入的t的参数为self.data[0]def display_f(self,t):if t!None:print(t.data,end )self.display_f(t.son)self.display_f(t.brother)#后序遍历def display_t(self,t):if t!None:self.display_t(t.son)self.display_t(t.brother)print(t.data,end )#中序遍历def display_m(self,t):if t!None:self.display_m(t.son)print(t.data,end )self.display_m(t.brother)a BEStree()
a.create_t(A)
a.create_other(0,B)
a.create_other(1,D,C)
a.create_other(2,G)
a.create_other(3,E)
a.create_other(5,None,F)
#后序遍历
a.display_t(a.data[0])
print()
#中序遍历
a.display_m(a.data[0])
print()
#先序遍历
a.display_f(a.data[0])
print()
# 改变值
a.change(A,10)
a.display_f(a.data[0])
print()
# 删除值
a.delx(10)
a.display_f(a.data[0])
长子兄弟链存储结构的优点 1. 节省空间相比于其他树的存储结构长子兄弟链存储结构更加节省空间因为它不需要额外的指针来表示左右子树。 2. 灵活性长子兄弟链存储结构可以有效地表示任意形状的树包括多叉树和不规则树因此具有较强的灵活性。 3. 操作便利在长子兄弟链存储结构中树的节点之间使用指针连接这样可以方便地进行树的遍历、插入、删除和查找等操作。
长子兄弟链存储结构的缺点 1. 操作复杂性相对于其他树的存储结构长子兄弟链存储结构的操作可能会更加复杂因为需要考虑节点之间的兄弟关系和孩子关系。 2. 不适用于特定场景长子兄弟链存储结构主要适用于一般的树结构对于特定的树如二叉树或平衡树等可能不是最佳的选择。 3. 不适合频繁修改的树长子兄弟链存储结构对于频繁进行插入和删除操作的树可能不太适用因为这样的操作可能会导致链的频繁调整影响效率。