1

I have found the code from this link:

class Node:
    def __init__(self, name, weight, children):
        self.children = children
        self.weight = weight
        self.weight_plus_children = weight

    def get_all_weight(self):
        if self.children is None:
          return self.weight_plus_children
        else:
          for child in self.children:
            print("child.get_all_weight()", child.get_weigth_with_children())
            self.weight_plus_children += child.get_weigth_with_children()

        return self.weight_plus_children

    def get_weigth_with_children(self):
        return self.weight_plus_children

leaf1 = Node('C1', 58, None)
leaf2 = Node('C2', 7, None)
leaf3 = Node('C3', 10, None)
leaf4 = Node('C4', 20, None)

subroot = Node('B1', 50, [leaf1, leaf2])
subroot1 = Node('B2', 50, [leaf3, leaf4])

root = Node('A', 100, [subroot, subroot1])

print(subroot.get_all_weight())
print(subroot1.get_all_weight())
print(root.get_all_weight())

Out:

child.get_all_weight() 58
child.get_all_weight() 7
115
child.get_all_weight() 10
child.get_all_weight() 20
80
child.get_all_weight() 115
child.get_all_weight() 80
295

Now, instead of child.get_all_weight(), I hope to show the nodes names on the output:

How could I generate a similar result as follows (not necessary to be exact same if it's difficult to realize)?

Value of leaf C1: 58
Value of leaf C2: 7
Sum of nodes B1: 115

Value of leaf C3: 10
Value of leaf C4: 20
Sum of nodes B2: 80

Sum of nodes A: 295

Thanks a lot at advance.

1 Answer 1

2
from collections import deque

class Node:
    def __init__(self, name, weight, children):
        self.name = name
        self.children = children
        self.weight = weight
        self.weight_plus_children = weight

    def get_all_weight(self):
        if self.children is None:
          return self.weight_plus_children
        for child in self.children:
            self.weight_plus_children += child.get_all_weight()
        return self.weight_plus_children

    
def print_tree(root: Node):
    queue = deque()
    queue.append(root)
    while queue:
        front = queue.popleft()
        print('{} = {}'.format(front.name, front.weight_plus_children))
        if front.children:
            for child in front.children:
                if child is not None:
                    queue.append(child)


leaf1 = Node('C1', 58, None)
leaf2 = Node('C2', 7, None)
leaf3 = Node('C3', 10, None)
leaf4 = Node('C4', 20, None)

subroot = Node('B1', 50, [leaf1, leaf2])
subroot1 = Node('B2', 50, [leaf3, leaf4])

root = Node('A', 100, [subroot, subroot1])

root.get_all_weight()

print_tree(root)

Output:

A = 295
B1 = 115
B2 = 80
C1 = 58
C2 = 7
C3 = 10
C4 = 20
Sign up to request clarification or add additional context in comments.

1 Comment

Sorry to bother you again, I asked a new question here at the case you could help, stackoverflow.com/questions/62908135/…. Thanks a lot.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.