2024年10月12日 星期六

追踪每個節點,並算出其左右子樹高度

 class Node:

  def __init__(self,key):

    self.left = None

    self.right = None

    self.val = key

    

def calculate_height(node):

  if node is None:

    return 0

    

  left_height = calculate_height(node.left)

  right_height = calculate_height(node.right)


  return max(left_height,right_height)+1


def find_node_and_subtree_heights(root):

  if root is None:

    return

  

  left_height = calculate_height(root.left)

  right_height = calculate_height(root.right)

 

  print(f'({root.val},{left_height},{right_height})')

  

  find_node_and_subtree_heights(root.left)

  find_node_and_subtree_heights(root.right)


root = Node(50)

root.left = Node(30)

root.right = Node(70)

root.left.left = Node(20)

root.left.left.left = Node(15)

root.left.left.right = Node(25)

root.left.right = Node(40)

root.right.left = Node(60)

root.right.right = Node(80)


find_node_and_subtree_heights(root)


# Output:


# (50,3,2)

# (30,2,1)

# (20,1,1)

# (15,0,0)

# (25,0,0)

# (40,0,0)

# (70,1,1)

# (60,0,0)

# (80,0,0)

沒有留言:

張貼留言