Published on

[Tree] Tree Sum

Problem

Write a function, treeSum, that takes in the root of a binary tree that contains number values. The function should return the total sum of all values in the tree.

DFS Recursion, DFS Stack, BFS Queue


class Node {
  constructor(val) {
    this.val = val;
    this.left = null;
    this.right = null;
  }
}

const treeSum = (root) => {
	// base case
	if(root === null) return 0;
	return root.val + treeSum(root.left) + treeSum(root.right)
};

const treeSumStack = (root) => {
	if(root === null) return 0;
	let sum = 0;
	const stack = [root]
	
	while(stack.length > 0) {
		const current = stack.pop()
		sum += current.val;
		
		if(current.left) stack.push(current.left)
		if(current.right) stack.push(current.right)
	}
	
	return sum
};

const treeSumQueue = (root) => {
	if(root === null) return 0;
	// todo
	let sum = 0;
	const queue = [root]

	while(queue.length > 0) {
		const current = queue.shift()
		sum += current.val;

		if(current.left) queue.push(current.left)
		if(current.right) queue.push(current.right)
	}

	return sum
};

{
	const a = new Node(3);
	const b = new Node(11);
	const c = new Node(4);
	const d = new Node(4);
	const e = new Node(-2);
	const f = new Node(1);

	a.left = b;
	a.right = c;
	b.left = d;
	b.right = e;
	c.right = f;

//       3
//    /    \
//   11     4
//  / \      \
// 4   -2     1

	console.log(
	treeSum(a)); // -> 21
	console.log(
		treeSumStack(a)); // -> 21
	console.log(
		treeSumQueue(a)); // -> 21
}

{
	const a = new Node(1);
	const b = new Node(6);
	const c = new Node(0);
	const d = new Node(3);
	const e = new Node(-6);
	const f = new Node(2);
	const g = new Node(2);
	const h = new Node(2);

	a.left = b;
	a.right = c;
	b.left = d;
	b.right = e;
	c.right = f;
	e.left = g;
	f.right = h;

//      1
//    /   \
//   6     0
//  / \     \
// 3   -6    2
//    /       \
//   2         2

	console.log(
	treeSum(a)); // -> 10
	console.log(
		treeSumStack(a)); // -> 21
	console.log(
		treeSumQueue(a)); // -> 21
}

{
	console.log(
	treeSum(null)); // -> 0
	console.log(
		treeSumStack(null)); // -> 0
	console.log(
		treeSumQueue(null)); // -> 0
}

Reference