2013-12-02 2 views
1

Как бы я вернул кортеж, содержащий количество внутренних узлов и количество листьев? Ниже приводится то, что я получил до сих пор, но, похоже, он работает неправильно.Вернуть кортеж, содержащий количество внутренних узлов и количество листьев

Кроме того, знает ли кто-нибудь о хорошем веб-сайте, где я могу узнать бинарные деревья и рекурсию с наборами проблем для большей практики?

class BTNode: 
    '''Node in binary tree''' 

    def __init__(self, value, left, right): 
     ''' 
     Create new BTNode with value and possible children left and right''' 

     self.value, self.left, self.right = value, left, right 

    def count_nodes(n:'BTNode') -> (int, int): 
     ''' 
     Return a tuple containing the number of interior nodes and the number of 
     leaves in the tree rooted at n, or (0,0) if n is None. 
     ''' 

     if not n: 
      return (0,0) 

     else: 
      left_internal, left_leaves = count_nodes(n.left) 
      right_internal, right_leaves = count_nodes(n.right) 
      internal, leaf = (1 if n.left or n.right else 0, 
           1 if not n.left and not n.right else 0) 

     return (left_internal + right_internal + internal, 
       left_leaves + right_leaves + leaf) 
+0

Просьба также показать, что он на самом деле * * выводит или возвращает. –

ответ

2
class BTNode: 
    '''Node in binary tree''' 

    def __init__(self, value, left=None, right=None): 
     ''' 
     Create new BTNode with value and possible children left and right 
     ''' 
     self.value, self.left, self.right = value, left, right 

    def count_nodes(self): 
     ''' 
     Return a tuple containing the number of interior nodes and the number of 
     leaves in the tree rooted at n, or (0,0) if n is None. 
     ''' 
     if self.left is None and self.right is None: 
      # leaf 
      return (0, 1) 
     else: 
      # internal node 
      left_nodes, left_leaves = (0, 0) if self.left is None else self.left.count_nodes() 
      right_nodes, right_leaves = (0, 0) if self.right is None else self.right.count_nodes() 
      return (left_nodes + 1 + right_nodes, left_leaves + right_leaves) 
+0

Спасибо за помощь! Однако я не понимаю базовый случай, возвращающий (0, 1). Не могли бы вы рассказать о своем ответе? – muros

+0

@muros: если у него нет левых или правых потомков, это лист. Поэтому он возвращает (0 внутренних узлов, 1 лист). –

Смежные вопросы