nmax := 10; pascal[nmax_] := Module[ {vals = Table[Binomial[n, k], {n, 0, nmax}, {k, 0, n}], ids = Table[{n, k}, {n, 0, nmax}, {k, 0, n}], labels, left, right, leftright, edgeLabels }, labels = Flatten[Thread /@ (Thread[ids -> vals]), 1]; left = DeleteCases[Flatten[Flatten[ids, 1] /. {n_, k_} /; (n >= k + 1) :> {{n, k + 1} -> {n + 1, k + 1}}, 1], _?NumberQ]; right = DeleteCases[Flatten[Flatten[ids, 1] /. {n_, k_} /; (n > k) :> {{n, k} -> {n + 1, k + 1}}, 1], _?NumberQ]; leftright = DeleteCases[left \[Union] right, _ -> {b_, _} /; b > nmax]; edgeLabels = (# -> Style["+", Medium] & /@ leftright); Graph[Flatten[ids, 1], leftright , VertexLabels -> MapAt[Placed[#, Center] &, labels, {All, 2}] , GraphLayout -> "SpringEmbedding" , VertexSize -> 0.8, EdgeLabels -> edgeLabels , PlotLabel -> "Pascal's Triangle" ] ]; pascal[nmax]