'For a given function, return all nodes in an optimal traversal order. If the function does not exist, return an
empty list.
:param int function_address: Address of the function.
:return: A ordered list of the nodes.
:rtype: list'

def _ordered_node_addrs(self, function_address):

    try:
        function = self.kb.functions[function_address]
    except KeyError:
        return []
    if (function_address not in self._function_node_addrs):
        sorted_nodes = CFGUtils.quasi_topological_sort_nodes(function.graph)
        self._function_node_addrs[function_address] = [n.addr for n in sorted_nodes]
    return self._function_node_addrs[function_address]
