# 3827 Homework 3, problem 2, "maxpath"
#
# <your name here>, <your uni here>
#
# Invoke with, e.g., spim -file maxpath.s
#	
	.text
	# $a0 : root of the tree

maxpath:
	# REPLACE THIS WITH YOUR CODE
	li	$v0, 0
	jr	$ra

######################################################################
#
# Test harness is below: extend to add tests
#
	.data

basecase:
	.word 42, 0, 0
	
smalltree:
	.word 39, .S1, .S2
.S1:	.word 3, 0, 0
.S2:	.word 2, 0, 0

tree2:	      .word 31, .T1, .T2
.T1:	      .word 42, .T3, .T4
.T2:	      .word 57, .T5, 0
.T3:	      .word 23, 0, 0
.T4:	      .word 31, 0, 0
.T5:	      .word 1, 0, 0

tree3:	      .word 6, .Q1, .Q2
.Q1:	      .word 5, .Q3, .Q2
.Q2:	      .word 4, .Q5, .Q4
.Q3:	      .word 3, 0, 0
.Q4:	      .word 2, 0, 0
.Q5:	      .word 1, 0, 0

	.text
	.globl main

print:
	bnez	$a0, .P1	# Null pointer: do nothing
	jr	$ra
.P1:
	addi	$sp, $sp, -8
	sw	$ra, 0($sp)
	sw	$s0, 4($sp)
	move	$s0, $a0
	
	li	$a0, '('
	li	$v0, 11	# print_character
	syscall

	lw	$a0, ($s0)
	li	$v0, 1	# print_int
	syscall

	li	$a0, ' '
	li	$v0, 11
	syscall
		
	lw	$a0, 4($s0)
	jal	print		# Print left tree

	li	$a0, ' '
	li	$v0, 11	# print_character
	syscall
	
	lw	$a0, 8($s0)
	jal	print		# Print right tree

	li	$a0, ')'
	li	$v0, 11	# print_character
	syscall

	lw	$ra, 0($sp)	# Return
	lw	$s0, 4($sp)
	addi	$sp, $sp, 8
	jr	$ra

main:
	la	$a0, basecase	# Print the basecase tree
	jal	print
	li	$a0, 10	# newline
	li	$v0, 11
	syscall

	la	$a0, basecase
	jal	maxpath
	
	move	$a0, $v0
	li	$v0, 1
	syscall			# Print maxpath(basecase) (should be 42)
	li	$a0, 10	# newline
	li	$v0, 11
	syscall

	
	la	$a0, smalltree	# Print the smalltree tree
	jal	print
	li	$a0, 10	# newline
	li	$v0, 11
	syscall

	la	$a0, smalltree
	jal	maxpath
	
	move	$a0, $v0
	li	$v0, 1
	syscall			# Print maxpath(smalltree) (should be XX)
	li	$a0, 10	# newline
	li	$v0, 11
	syscall

	
	la	$a0, tree2	# Print the tree2 tree
	jal	print
	li	$a0, 10	# newline
	li	$v0, 11
	syscall

	la	$a0, tree2
	jal	maxpath
	
	move	$a0, $v0
	li	$v0, 1
	syscall			# Print maxpath(tree2) (should be XX)
	li	$a0, 10	# newline
	li	$v0, 11
	syscall

	la	$a0, tree3	# Print the tree3 tree
	jal	print
	li	$a0, 10	# newline
	li	$v0, 11
	syscall
	
	la	$a0, tree3
	jal	maxpath
	
	move	$a0, $v0
	li	$v0, 1
	syscall			# Print maxpath(tree3) (should be XX)
	li	$a0, 10	# newline
	li	$v0, 11
	syscall

	li	$v0, 10		# exit
	syscall
