1. A method of producing a flexible timing-driven routing tree comprising the steps of: sorting two or more target nodes in accordance with data criticality; building a source-sink grid from one or more source nodes and the two or more target nodes; building an initial routing tree comprising the one or more source nodes; and executing a routing tree generation algorithm on the initial routing tree, utilizing the sorted two or more target nodes and the source-sink grid in accordance with a user-defined timing factor to construct a flexible timing-driven routing tree, wherein the user-defined timing factor specifies a degree of isolation for a routing path from a given one of the one or more source nodes to a given one of the two or more target nodes, wherein a timing factor value can be assigned to specify complete isolation of a specific critical path from other routing paths, wherein the step of executing a routing tree generation algorithm comprises the steps of: initializing a current routing tree as the initial routing tree; determining if at least one of the two or more target nodes is unrouted; when at least one of the two or more target nodes is unrouted, executing a shortest path determination algorithm from a given node of the current routing tree to an unrouted target node in accordance with the timing factor and the source-sink grid to form a new current routing tree, and repeating the determining step; and defining the current routing tree as the flexible timing driven routing tree when the two or more target nodes are routed, and wherein the steps of sorting, building and executing are performed by a computer.