Do you want something like this?
SELECT DISTINCT *
FROM
(
SELECT DISTINCT IdNode AS '1st_Level'
FROM #TEMP
WHERE LEN(IdNode)=1
UNION ALL
SELECT DISTINCT IdSubNode AS '1st_Level'
FROM #TEMP
WHERE LEN(IdSubNode) = 1)A
LEFT JOIN
(SELECT DISTINCT IdNode AS '2nd_Level'
FROM #TEMP
WHERE LEN(IdNode)=2
UNION ALL
SELECT DISTINCT IdSubNode AS '2nd_Level'
FROM #TEMP
WHERE LEN(IdSubNode) = 2)B
ON A.[1st_Level] = LEFT(B.[2nd_Level],1)
LEFT JOIN
(SELECT DISTINCT IdNode AS '3rd_Level'
FROM #TEMP
WHERE LEN(IdNode)=3
UNION ALL
SELECT DISTINCT IdSubNode AS '3rd_Level'
FROM #TEMP
WHERE LEN(IdSubNode) = 3)C
ON LEFT(B.[2nd_Level],1) = LEFT(C.[3rd_Level],1)