Python은 두 갈래 정렬 트리의 검색, 삽입, 삭제를 실현합니다
2626 단어 알고리즘과 데이터 구조
import sys
import gc
sys.path.append("F:\Workspace")
from Algorithm.TreeNode import TreeNode
def SearchBST(t: TreeNode, key: int)->bool:
if t is None:
return False
if key == t.val:
return True
elif key < t.val:
return SearchBST(t.left, key)
else:
return SearchBST(t.right, key)
def InsertBST(t: TreeNode, key: int)->TreeNode:
new_t = TreeNode(key, None, None)
if t is None:
t = new_t
else:
if key < t.val:
t.left = InsertBST(t.left, key)
elif key > t.val:
t.right = InsertBST(t.right, key)
return t
def DeleteBST(t: TreeNode, key: int)->bool:
if t is None:
return False
else:
if key == t.val:
return Delete(t)
elif key < t.val:
return DeleteBST(t.left, key)
else:
return DeleteBST(t.right, key)
def Delete(p: TreeNode)->bool:
if p.right is None: # ,
q = p
p = p.left
del q
elif p.left is None: # ,
q = p
p = p.right
del q
else: #
q, s = p, p.left
while s.right:
q = s
s = s.right
p.val = s.val
if q != p:
q.right = s.left
else:
q.left = s.left
del s
gc.collect()
return True
def inorder_traversal(t: TreeNode):
if t is None:
return
inorder_traversal(t.left)
print(t.val, end=" ")
inorder_traversal(t.right)
if __name__ == '__main__':
root = TreeNode(62,
TreeNode(58, TreeNode(47, TreeNode(35, None, TreeNode(37, None, None)), TreeNode(51, None, None)), None),
TreeNode(88, TreeNode(73, None, None), TreeNode(99, TreeNode(93, None, None), None))
)
print(" :", end=" ")
inorder_traversal(root)
print()
print(" 47 :", SearchBST(root, 47))
print(" 49 :", InsertBST(root, 49))
print(" :", end=" ")
inorder_traversal(root)
print()
print(" 47 :", DeleteBST(root, 47))
print(" :", end=" ")
inorder_traversal(root)
출력:
: 35 37 47 51 58 62 73 88 93 99
47 : True
49 :
: 35 37 47 49 51 58 62 73 88 93 99
47 : True
: 35 37 49 51 58 62 73 88 93 99
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
두 갈래 나무의 앞 순서, 중간 순서, 뒤 순서, 깊이 우선 검색, 폭 우선 검색광범위한 우선 검색(Breadth-First-Search)은 루트 노드에서 시작하여 층층이 접근하여 직관적인 생각에 비교적 부합된다.대기열의 선진적인 선출 특성을 사용하여 특정한 층 노드를 방문한 후 이 층 노드를 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.