สมมติว่าเรามีไบนารีทรีและรายการสตริงที่ประกอบด้วย "R" (ขวา) "L" (ซ้าย) และ "U" (ขึ้น) เริ่มต้นจากรูท เราต้องสำรวจต้นไม้โดยทำการเคลื่อนไหวแต่ละครั้งโดยที่:"R" หมายถึงสำรวจไปยังลูกที่ถูกต้อง "L" หมายถึงการเลื่อนไปทางซ้ายของลูก "U" หมายถึงการข้ามไปยังระดับบนสุด
ดังนั้นหากอินพุตเป็นแบบ
["R","R","U","L"] แล้วเอาท์พุตจะเป็น 3
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
อดีต :=รายการใหม่
-
สำหรับการเคลื่อนไหวแต่ละครั้งให้ทำ
-
แทรกรูตที่ส่วนท้ายของอดีต
-
หากการเคลื่อนไหวเหมือนกับ "L" แล้ว
-
root :=เหลือรูท
-
-
มิฉะนั้นเมื่อการเคลื่อนไหวเหมือนกับ "R" แล้ว
-
root :=ด้านขวาของรูท
-
-
มิฉะนั้น
-
ลบองค์ประกอบสุดท้ายจากอดีต
-
root :=องค์ประกอบสุดท้ายจากอดีตและลบออกจากอดีต
-
-
-
ส่งคืนค่ารูท
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class TreeNode: def __init__(self, data, left = None, right = None): self.val = data self.left = left self.right = right class Solution: def solve(self, root, moves): past = [] for move in moves: past.append(root) if move == "L": root = root.left elif move == "R": root = root.right else: past.pop() root = past.pop() return root.val ob = Solution() root = TreeNode(2) root.right = TreeNode(4) root.right.left = TreeNode(3) root.right.right = TreeNode(5) traverse = ["R","R","U","L"] print(ob.solve(root, traverse))
อินพุต
root = TreeNode(2) root.right = TreeNode(4) root.right.left = TreeNode(3) root.right.right = TreeNode(5) ["R","R","U","L"]
ผลลัพธ์
3