Your task is to implement a directed_graph class, where each node/edge has a weight. (Please use adjacency matrix)
The class should offer a reasonably effective suite of operations. Some (but not all) of basic operations are:
Adding and removing nodes and edges (with weights);
Depth-first and breadth-first traversals;
Computing a tree rooted by the given vertex (the tree may not contain all vertices of the graph);
Pre-order, in-order, and post-order traversals of the tree;