CS153/hw6/hw5programs/sp22_tests/binary_tree_tests.oat
jmug ee01a8f5b2 Change hw6 to an unsolved version.
Signed-off-by: jmug <u.g.a.mariano@gmail.com>
2025-01-24 23:10:01 -08:00

76 lines
No EOL
1.6 KiB
Text

struct Node {
int val;
Node? left;
Node? right
}
struct Tuple {
int max_sum_path;
int max_path_term_node
}
Node newNode (int val) {
return new Node {val = val; left = Node null; right = Node null};
}
int getMax(int a, int b) {
if(a >= b) {
return a;
}
return b;
}
Tuple findMaxSumHelper (Node? root, Tuple input_tuple) {
if?(Node x = root) {
var l_result = findMaxSumHelper(x.left, input_tuple).max_path_term_node;
var r_result = findMaxSumHelper(x.right, input_tuple).max_path_term_node;
var max_children = getMax(l_result, r_result);
var curr_root_terminating_path = getMax(max_children + x.val, x.val);
var max_no_parent = getMax(curr_root_terminating_path, x.val + l_result + r_result);
var res = getMax(input_tuple.max_sum_path, max_no_parent);
var ret_tuple = new Tuple {max_sum_path = res; max_path_term_node = curr_root_terminating_path};
return ret_tuple;
} else {
var ret = new Tuple {max_sum_path = input_tuple.max_sum_path; max_path_term_node = 0};
return ret;
}
}
int findMaxSumDriver(Node root) {
var input_tuple = new Tuple {max_sum_path = -99999; max_path_term_node = 0};
var temp = findMaxSumHelper(root, input_tuple);
return temp.max_sum_path;
}
int program(int argc, string[] argv) {
var root = newNode(8);
root.left = newNode(2);
root.right = newNode(70);
if?(Node r_l = root.left) {
r_l.left = newNode(50);
r_l.right = newNode(0);
}
if?(Node r_r = root.right) {
r_r.right = newNode(15);
if?(Node r_r_r = r_r.right) {
r_r_r.right = newNode(4);
r_r_r.left = newNode(-9);
}
}
return findMaxSumDriver(root);
}