A recursive common table expression will do it in a fairly straight forward way;
WITH cte(tree_gid, node_id, tree_name) AS (
SELECT tree_gid, node_id, tree_name FROM mytable WHERE tree_name IS NOT NULL
UNION ALL
SELECT m.tree_gid, m.node_id, cte.tree_name
FROM mytable m
JOIN cte ON cte.node_id = m.parent_node_id AND cte.tree_gid = m.tree_gid
)
SELECT * FROM cte
ORDER BY tree_gid, node_id;
EDIT: You could also use CONNECT BY
as your commented link describes;
SELECT tree_gid, node_id, CONNECT_BY_ROOT tree_name
FROM mytable
START WITH tree_name IS NOT NULL
CONNECT BY PRIOR node_id = parent_node_id AND PRIOR tree_gid = tree_gid
ORDER SIBLINGS BY tree_gid, node_id;