Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ความลึกสูงสุดของต้นไม้แบบทวิภาคใน Python

สมมติว่าเรามีต้นไม้แบบทวิภาคหนึ่งต้น เราต้องหาความลึกสูงสุดของต้นไม้นั้น ความลึกสูงสุดของต้นไม้คือจำนวนโหนดสูงสุดที่เดินทางผ่านเพื่อไปถึงใบจากรากโดยใช้เส้นทางที่ยาวที่สุด สมมติต้นไม้เป็นแบบด้านล่าง ความลึกจะเป็น 3

ความลึกสูงสุดของต้นไม้แบบทวิภาคใน Python

วิธีการแก้ปัญหา

  • เราจะใช้แนวทางแบบเรียกซ้ำ (recursive) เมธอดคือ solve(root, depth = 0)
  • ถ้ารากว่าง ให้คืนค่า depth
  • มิฉะนั้น คืนค่าค่าสูงสุดของ solve(left, depth + 1) และ solve(right, depth + 1)

ตัวอย่าง

class TreeNode:
    def __init__(self, data, left=None, right=None):
        self.data = data
        self.left = left
        self.right = right

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)
            else:
                temp.left = TreeNode(0)
            break
        else:
            que.append(temp.left)
        if not temp.right:
            if data is not None:
                temp.right = TreeNode(data)
            else:
                temp.right = TreeNode(0)
            break
        else:
            que.append(temp.right)

def make_tree(elements):
    Tree = TreeNode(elements[0])
    for element in elements[1:]:
        insert(Tree, element)
    return Tree

class Solution(object):
    def maxDepth(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        return self.solve(root)

    def solve(self, root, depth=0):
        if root == None:
            return depth
        return max(self.solve(root.left, depth+1), self.solve(root.right, depth+1))

tree1 = make_tree([1,2,2,3,4,None,3])
ob1 = Solution()
print(ob1.maxDepth(tree1))

อินพุต

tree1 = make_tree([1,2,2,3,4,None,3])

เอาต์พุต

3