class Node(object):
def __init__(self, item):
self.item = item
self.left = None
self.right = None
def __str__(self):
return str(self.item)
class Tree(object):
def __init__(self):
self.root = Node('root')
def add(self, item):
node = Node(item)
if self.root.item == 'root':
self.root = node
else:
q = [self.root]
while True:
value = q.pop(0)
if value.left is None:
value.left = node
return
elif value.right is None:
value.right = node
return
else:
q.append(value.left)
q.append(value.right)
def get_parent(self, item):
if self.root.item == item:
return None
q = [self.root]
while q:
value = q.pop(0)
if value.left and value.left.item == item:
return value
elif value.right and value.right.item == item:
return value
if value.left is not None:
q.append(value.left)
if value.right is not None:
q.append(value.right)
return None
def delete(self, item):
if self.root is None:
return False
parent = self.get_parent(item)
if parent:
del_node = parent.left if parent.left.item == item else parent.right
if del_node.left is None:
if parent.left.item == item:
parent.left = del_node.right
else:
parent.right = del_node.right
del del_node
return True
elif del_node.right is None:
if parent.left.item == item:
parent.left = del_node.left
else:
parent.right = del_node.left
del del_node
return True
else: # 待删除节点左右子树都不为空
tmp_pre = del_node
tmp_next = del_node.right
if tmp_next.left is None:
tmp_pre.right = tmp_next.right
tmp_next.left = del_node.left
tmp_next.right = del_node.right
else:
while tmp_next.left:
tmp_pre = tmp_next
tmp_next = tmp_next.left
tmp_pre.left = tmp_next.right
tmp_next.left = del_node.left
tmp_next.right = del_node.right
if parent.left.item == item:
parent.left = tmp_next
else:
parent.right = tmp_next
del del_node
return True
else:
return False
if __name__ == '__main__':
t = Tree()
t.add(5)
t.add(6)
t.add(7)
t.add(3)
print(t.get_parent(3))
t.delete(6)
print(t.get_parent(3))
Python简单实现Tree
最新推荐文章于 2023-05-05 21:18:11 发布
本文定义了两个类,classNode和classTree,分别用于创建二叉树的节点和整个树结构。classTree提供了添加节点、获取父节点和删除节点的方法。在主函数中,创建了一个二叉树并进行了操作示例。
摘要由CSDN通过智能技术生成