class TreeNode {
constructor(val) {
this.val = val;
this.left = null;
this.right = null;
}
}
implement a queue
implement a stack
node,l. subtree, r. subtree
l.subtree, node, r.subtreethe left subtree contains values less than the root
l.subtree, r.subtree, node
BST Definition
- l. subtree contains values < root
- r. subtree contains values >= to the root
- l. & r. subtree are BST
insert: log(n) search: log(n)
- Using a node implementation with iteration:
// This is easy to swap to a breadth-first approach by using a queue instead of a stack!
// Instead of popping from the top, we can shift from the front
function depthFirstIter(node) {
let visited = new Set();
let stack = [node];
while (stack.length) {
let node = stack.pop();
// if this node has already been visited, then skip this node
if (visited.has(node.val)) continue;
// otherwise it hasn't yet been visited,
// so print it's val and mark it as visited.
console.log(node.val);
visited.add(node.val);
// then add its neighbors to the stack to be explored
stack.push(...node.neighbors);
}
}