Google favors tree and graph problems because they test your ability to model relationships and apply DFS/BFS. Dynamic programming shows up when problems have overlapping subproblems and optimal substructure.
I'll cover problems here: grid traversals, topological ordering, tree recursion, DP on strings and arrays, and a merge problem using heaps. These patterns cover the majority of what you'll see at L4 and above.