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

วิธีการแก้ปัญหา
- เราจะใช้แนวทางแบบเรียกซ้ำ (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