Skip to content

Commit

Permalink
Merge branch 'devin/tree-algorithm' of https://github.com/marcosfede/…
Browse files Browse the repository at this point in the history
…algorithms into devin/tree-algorithm
  • Loading branch information
staging-devin-ai-integration[bot] committed Aug 22, 2024
2 parents 7cb4355 + 6dec81f commit 1255ca6
Show file tree
Hide file tree
Showing 3 changed files with 139 additions and 0 deletions.
48 changes: 48 additions & 0 deletions tree/binary_tree/new_tree_algorithm.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right

def new_tree_algorithm(root):
"""
This function calculates the sum of all nodes at each level of a binary tree.
Args:
root (TreeNode): The root node of the binary tree.
Returns:
list: A list where each element is the sum of node values at the corresponding level.
"""
if not root:
return []

level_sums = []
current_level = [root]

while current_level:
level_sum = sum(node.val for node in current_level)
level_sums.append(level_sum)

next_level = []
for node in current_level:
if node.left:
next_level.append(node.left)
if node.right:
next_level.append(node.right)

current_level = next_level

return level_sums

# Example usage:
if __name__ == "__main__":
# Create a sample binary tree
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)

result = new_tree_algorithm(root)
print(f"Sum of nodes at each level: {result}")
54 changes: 54 additions & 0 deletions tree/binary_tree_traversal.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right

class BinaryTreeTraversal:
def inorder_traversal(self, root):
result = []
self._inorder(root, result)
return result

def _inorder(self, node, result):
if node:
self._inorder(node.left, result)
result.append(node.val)
self._inorder(node.right, result)

def preorder_traversal(self, root):
result = []
self._preorder(root, result)
return result

def _preorder(self, node, result):
if node:
result.append(node.val)
self._preorder(node.left, result)
self._preorder(node.right, result)

def postorder_traversal(self, root):
result = []
self._postorder(root, result)
return result

def _postorder(self, node, result):
if node:
self._postorder(node.left, result)
self._postorder(node.right, result)
result.append(node.val)

# Example usage
if __name__ == "__main__":
# Create a sample binary tree
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)

traversal = BinaryTreeTraversal()

print("Inorder traversal:", traversal.inorder_traversal(root))
print("Preorder traversal:", traversal.preorder_traversal(root))
print("Postorder traversal:", traversal.postorder_traversal(root))
37 changes: 37 additions & 0 deletions tree/test_binary_tree_traversal.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import unittest
from binary_tree_traversal import TreeNode, BinaryTreeTraversal

class TestBinaryTreeTraversal(unittest.TestCase):
def setUp(self):
self.traversal = BinaryTreeTraversal()

def test_empty_tree(self):
self.assertEqual(self.traversal.inorder_traversal(None), [])
self.assertEqual(self.traversal.preorder_traversal(None), [])
self.assertEqual(self.traversal.postorder_traversal(None), [])

def test_single_node_tree(self):
root = TreeNode(1)
self.assertEqual(self.traversal.inorder_traversal(root), [1])
self.assertEqual(self.traversal.preorder_traversal(root), [1])
self.assertEqual(self.traversal.postorder_traversal(root), [1])

def test_sample_tree(self):
# Create a sample binary tree
# 1
# / \
# 2 3
# / \
# 4 5
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)

self.assertEqual(self.traversal.inorder_traversal(root), [4, 2, 5, 1, 3])
self.assertEqual(self.traversal.preorder_traversal(root), [1, 2, 4, 5, 3])
self.assertEqual(self.traversal.postorder_traversal(root), [4, 5, 2, 3, 1])

if __name__ == '__main__':
unittest.main()

0 comments on commit 1255ca6

Please sign in to comment.