สมมติว่าเราได้รับไบนารีทรีและโหนดเฉพาะสองโหนด x และ y เราต้องหาบรรพบุรุษร่วมที่ต่ำที่สุดของโหนดทั้งสองจากไบนารีทรี บรรพบุรุษร่วมที่ต่ำที่สุดในไบนารีทรีคือโหนดที่ต่ำที่สุดซึ่งทั้งโหนด x และ y เป็นลูกหลาน โหนดใดโหนดหนึ่งสามารถเป็นลูกหลานของตัวเองได้เช่นกัน เราต้องหาโหนดและส่งคืนเป็นเอาต์พุต
โครงสร้างโหนดของต้นไม้มีลักษณะดังนี้ -
TreeNode: data: <integer> left: <pointer of TreeNode> right: <pointer of TreeNode> parent: <pointer of TreeNode>
เราต้องใช้ตัวชี้หลักในขณะที่ค้นหาวิธีแก้ปัญหา
ดังนั้นหากอินพุตเป็นแบบ
และ x =3, y =7; แล้วผลลัพธ์จะเป็น 5.
3 และ 7 เป็นทายาทของ 5 ทั้งคู่ ดังนั้นคำตอบจะเป็น 5
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
path_p_r :=รายการใหม่
-
ในขณะที่ x ไม่เป็นโมฆะให้ทำ
-
ใส่ x ที่ท้าย path_p_r
-
x :=พาเรนต์ของ x
-
-
ในขณะที่ y ไม่เป็นโมฆะให้ทำ
-
ถ้า y มีอยู่ใน path_p_r แล้ว
-
กลับมาแล้ว
-
-
y :=ผู้ปกครองของ y
-
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class TreeNode: def __init__(self, data, left = None, right = None, parent = None): self.data = data self.left = left self.right = right self.parent = parent def insert(temp,data): que = [] que.append(temp) while (len(que)): temp = que[0] que.pop(0) if (not temp.left): if data is not None: temp.left = TreeNode(data, parent=temp) else: temp.left = TreeNode(0,parent=temp) break else: que.append(temp.left) if (not temp.right): if data is not None: temp.right = TreeNode(data,parent=temp) else: temp.right = TreeNode(0,parent=temp) break else: que.append(temp.right) def make_tree(elements): Tree = TreeNode(elements[0]) for element in elements[1:]: insert(Tree, element) return Tree def search_node(root, element): if (root == None): return None if (root.data == element): return root res1 = search_node(root.left, element) if res1: return res1 res2 = search_node(root.right, element) return res2 def solve(x, y): path_p_r = [] while x: path_p_r.append(x) x = x.parent while y: if y in path_p_r: return y y = y.parent root = make_tree([5, 3, 7, 2, 4, 1, 7, 6, 8, 10]) print(solve(search_node(root, 3), search_node(root, 7)).data)
อินพุต
[5, 3, 7, 2, 4, 1, 7, 6, 8, 10], 3, 7
ผลลัพธ์
5