Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 0 additions & 54 deletions programming_lab/lab041219/alberi_binari.py

This file was deleted.

25 changes: 0 additions & 25 deletions programming_lab/lab041219/alberi_generici.py

This file was deleted.

89 changes: 0 additions & 89 deletions programming_lab/lab041219/albero_binario.py

This file was deleted.

20 changes: 10 additions & 10 deletions programming_lab/lab041219/albero_nari.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,19 @@
"""


class Nodo:
def __init__(self, V, figli=[]):
self.valore = V
if len(figli) == 0:
self.figli = []
class Node:
def __init__(self, V, sons=[]):
self.value = V
if len(sons) == 0:
self.sons = []
else:
self.figli = figli
self.sons = sons


def trova_massimo(albero):
max_rel = albero.valore
for figlio in albero.figli:
m = trova_massimo(figlio)
def find_max(tree):
max_rel = tree.value
for sons in tree.sons:
m = find_max(sons)
if m > max_rel:
max_rel = m
return max_rel
89 changes: 89 additions & 0 deletions programming_lab/lab041219/binary_tree.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Wed Dec 4 16:25:58 2019

@author: angelo
Write a recursive function that counts the number
of nodes of a tree.

"""


class Node:
def __init__(self, v):
self.value = v
self.left = None
self.right = None

def __str__(self, level=0):
result = ""
if self.left:
result += "\n" + "\t" * level + self.left.__str__(level + 1)
result += "\n" + "\t" * level + f"{self.value}"
if self.right:
result += "\n" + "\t" * level + self.right.__str__(level + 1)
return result

def counter_node(self):
if not self.left and not self.right:
return 1
c = 1
if self.left:
c += self.left.counter_node()
if self.right:
c += self.right.counter_node()
return c


def counter_node(tree):
"""base case = None return 0
recursive case = return 1 + the number of children of left + the number of children of right"""
if tree == None:
return 0
return 1 + counter_node(tree.left) + counter_node(tree.right)


def counter_node2(tree):
"""base case = leaf node -> return 1
recursive case = return 1 + the number of children of left + the number of children of right
"""
if not tree.left and not tree.right:
return 1
c = 1
if tree.left:
c += counter_node(tree.left)
if tree.right:
c += counter_node(tree.right)
return c


def find_max(tree):
"""base case: leaf node -> leaf.value
recursive case: tree with left child and right child
return the greater of leaf value and max (left) and max (right)
"""
if not tree.left and not tree.right:
return tree.value
m, m1, m2 = tree.value, tree.value, tree.value
if tree.left:
m1 = find_max(tree.left)
if albero.right:
m2 = find_max(tree.right)
return max(m, m1, m2)


def calculate_height(tree):
"""The greatest length of the path from root to leaf

base case: leaf node: 0
recursive case: 1 + maximum_height between left child and right child
"""
if not tree.left and not tree.right:
return 0
m1, m2 = 0, 0
if tree.left:
m1 = calculate_height(tree.left)
if albero.right:
m2 = calculate_height(tree.right)
return max(m1, m2) + 1
54 changes: 54 additions & 0 deletions programming_lab/lab041219/binary_trees.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Wed Dec 4 11:21:47 2019

@author: angelo
"""


class BinaryNode:
def __init__(self, V, SX=None, DX=None):
self.value = V
self.sx = SX
self.dx = DX

def __str__(self, level=0):
result = ""
if self.sx:
result += "\n" + "\t" * level + self.sx.__str__(level + 1)
result += "\n" + "\t" * level + f"{self.value}"
if self.dx:
result += "\n" + "\t" * level + self.dx.__str__(level + 1)
return result


def height(tree):
"""Function that takes a binary tree and returns
the height of the tree, i.e. the longest distance
of a leaf from the root"""

if not tree.sx and not tree.dx:
return 0
alt, alt2 = 0, 0
if tree.sx:
alt = height(tree.sx)
if albero.dx:
alt2 = height(tree.dx)
if alt > alt2:
return alt + 1
else:
return alt2 + 1


def find_max(tree):
"""Function that takes a binary tree and returns the
maximum value of the tree"""
if not tree.sx and not tree.dx:
return tree.value
m1, m2 = tree.value, tree.value
if tree.sx:
m1 = find_max(tree.sx)
if tree.dx:
m2 = find_max(tree.dx)
return max(m1, m2, tree.value)
24 changes: 24 additions & 0 deletions programming_lab/lab041219/even_sum_list.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Wed Dec 4 10:31:34 2019

@author: angelo
Write a recursive sum_list_even function
returns the sum of all even numbers in the list

sum_even([1,2,3,4]) = if(1=even:1 else 0) + sum([2,3,4]) = ... if(2=even:2 else 0) + sum([3,4])
sum([]) = 0
=
CODICE DESCRIPTION 57S6HE9N
"""


def sum_list_even(l):
if l == []:
return 0
partial_sum = sum_list_even(l[1:])
# Module 2 returns 1 (i.e. True) if diseven
if l[0] % 2:
return partial_sum
return l[0] + partial_sum
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,14 @@
"""


def fattoriale(n):
def factorial(n):
if n == 1:
return 1
return n * fattoriale(n - 1)
return n * factorial(n - 1)


def fattoriale_iterativo(n):
fatt = 1
def factorial_iterative(n):
fact = 1
for i in range(n, 1, -1):
fatt *= i
return fatt
fact *= i
return fact
Loading