Arm/treedepth

From ASMBits

A binary tree is a data structure composed of nodes that contain up to two child nodes each, with no cycles. (This is not a binary search tree, which additionally requires the children nodes to be ordered.)

This problem uses nodes that have two fields: Pointers to the two child nodes. There is no data field.

struct Node {
    Node *a;
    Node *b;
};

Starting at a node, the tree rooted at that node can be explored by recursively visiting each of its child nodes (if it is not a null pointer). A Node where both child pointers are 0 has no children (is a leaf node).

Write a function that returns whether the depth of the tree rooted at the given node is less than or equal to d (return 1 or 0). The depth is the number of hops needed to reach the furthest node from the root, including the root node itself. The smallest possible tree has depth 1 (if both child pointers are null). You may assume root is always a valid tree.

bool depth (Node *root, unsigned int d);

Remember: The initialization code you write for testing (at label _start) is not used during judging.

Expected solution length: Around 40 lines.

Sample Input

{A[B,C], B[0,0], C[0,0]}, 2
{A[0,0]}, 0

Sample Output

1 (true: depth is 2, which is <= 2)
0 (false: depth is 1, which is not <= 0)

The question is posed so that simply making function depth recursive wouldn't be enough to solve the problem. However, it can be easily split into two functions: 1. A function that compares the tree depth with d, and 2. a recursive function that returns the depth of the tree. Thus, you will likely be writing two functions for this problem.

Write your solution here

x
 
1
.data
2
A: .word B, C
3
B: .word 0, 0
4
C: .word 0, 0
5
6
.text
7
.global _start
8
9
_start:
10
    ldr r0, =A
11
    mov r1, #2
12
    bl depth
13
    1: b 1b
14
15
.global depth
16
depth:
17
    
18
    
Upload a source file...