You can use the backgrounds
library to shade behind the tree and the fit
library to help fit it around the nodes. (You still need a manual adjustment to account for the labels but fit
takes care of the vertical since you know the inner sep used in the tree.)
I've also spread the last nodes so that the labels are not typeset over each other.
Just for purposes of illustration, I've shaded the background in a darker grey since a 2% shading is almost invisible.
\documentclass{standalone}
\usepackage{forest}
\usetikzlibrary{backgrounds,fit}
\begin{document}
\begin{forest}
for tree={draw, circle, l sep+=0.5em, where level={3}{s sep+=1em}{}, inner sep=0.05em}
[,fill
[{$-$}, edge label={node[midway,left]{$0.70$}}
[$-$, edge label={node[midway,left]{$0.78$}}, name=a
[$-$, edge label={node[midway,left]{$0.80$}}, name=c
[$-$, edge label={node[midway,left]{$0.82$}}]
[$+$, edge label={node[midway,right]{$0.18$}}]
]
[$+$, edge label={node[midway,right]{$0.20$}}
[$-$, edge label={node[midway,left]{$0.49$}}]
[$+$, edge label={node[midway,right]{$0.51$}}]
]
]
[$+$, edge label={node[midway,right]{$0.22$}}
[$-$, edge label={node[midway,left]{$0.50$}}
[$-$, edge label={node[midway,left]{$0.70$}}]
[$+$, edge label={node[midway,right]{$0.30$}}]
]
[$+$, edge label={node[midway,right]{$0.50$}}
[$-$, edge label={node[midway,left]{$0.57$}}]
[$+$, edge label={node[midway,right]{$0.43$}}]
]
]
]
[{$+$}, edge label={node[midway,right]{$0.30$}}
[$-$, edge label={node[midway,left]{$0.50$}}
[$-$, edge label={node[midway,left]{$0.71$}}
[$-$, edge label={node[midway,left]{$0.75$}}]
[$+$, edge label={node[midway,right]{$0.25$}}]
]
[$+$, edge label={node[midway,right]{$0.29$}}
[$-$, edge label={node[midway,left]{$0.53$}}]
[$+$, edge label={node[midway,right]{$0.47$}}]
]
]
[$+$, edge label={node[midway,right]{$0.50$}}
[$-$, edge label={node[midway,left]{$0.50$}}
[$-$, edge label={node[midway,left]{$0.72$}}]
[$+$, edge label={node[midway,right]{$0.28$}}]
]
[$+$, edge label={node[midway,right]{$0.50$}}, name=b
[$-$, edge label={node[midway,left]{$0.44$}}]
[$+$, edge label={node[midway,right]{$0.56$}}]
]
]
]
]
\begin{scope}[on background layer]
\node [fill=black!25, fit={(a.south) (c) (b)}, inner ysep=.05em, inner xsep=.75em, outer sep=0pt] {};
\end{scope}
\end{forest}
\end{document}
Update
To add the labels, you could use the positioning
library as follows:
\documentclass{standalone}
\usepackage{forest}
\usetikzlibrary{backgrounds,fit,positioning}
\begin{document}
\begin{forest}
for tree={draw, circle, l sep+=0.5em, where level={3}{s sep+=1em}{}, inner sep=0.05em}
[,fill
[{$-$}, edge label={node[midway,left]{$0.70$}}, name=e
[$-$, edge label={node[midway,left]{$0.78$}}, name=a
[$-$, edge label={node[midway,left]{$0.80$}}, name=c
[$-$, edge label={node[midway,left]{$0.82$}}, name=d]
[$+$, edge label={node[midway,right]{$0.18$}}]
]
[$+$, edge label={node[midway,right]{$0.20$}}
[$-$, edge label={node[midway,left]{$0.49$}}]
[$+$, edge label={node[midway,right]{$0.51$}}]
]
]
[$+$, edge label={node[midway,right]{$0.22$}}
[$-$, edge label={node[midway,left]{$0.50$}}
[$-$, edge label={node[midway,left]{$0.70$}}]
[$+$, edge label={node[midway,right]{$0.30$}}]
]
[$+$, edge label={node[midway,right]{$0.50$}}
[$-$, edge label={node[midway,left]{$0.57$}}]
[$+$, edge label={node[midway,right]{$0.43$}}]
]
]
]
[{$+$}, edge label={node[midway,right]{$0.30$}}
[$-$, edge label={node[midway,left]{$0.50$}}
[$-$, edge label={node[midway,left]{$0.71$}}
[$-$, edge label={node[midway,left]{$0.75$}}]
[$+$, edge label={node[midway,right]{$0.25$}}]
]
[$+$, edge label={node[midway,right]{$0.29$}}
[$-$, edge label={node[midway,left]{$0.53$}}]
[$+$, edge label={node[midway,right]{$0.47$}}]
]
]
[$+$, edge label={node[midway,right]{$0.50$}}
[$-$, edge label={node[midway,left]{$0.50$}}
[$-$, edge label={node[midway,left]{$0.72$}}]
[$+$, edge label={node[midway,right]{$0.28$}}]
]
[$+$, edge label={node[midway,right]{$0.50$}}, name=b
[$-$, edge label={node[midway,left]{$0.44$}}]
[$+$, edge label={node[midway,right]{$0.56$}}]
]
]
]
]
\begin{scope}[on background layer]
\node [fill=black!25, fit={(a.south) (c) (b)}, inner ysep=.05em, inner xsep=.75em, outer sep=0pt] {};
\end{scope}
\node (p) [left=5pt of d] {memory 4};
\node at (p |- c) {memory 3};
\node at (p |- a) {memory 2};
\node at (p |- e) {memory 1};
\end{forest}
\end{document}
Use the rotate
option if you want the nodes labelling the tree to run vertically. (I wasn't sure whether you wanted this or not.)
Best Answer
Edges from your root node are going from south coordinate of root node. If I understand you correctly, you like that they start from center of
\bowtie
simbol, i.e. they start should be shifted to the left. One way, how to achieve this is use\mathrlap
defined inmathtools
package:Is this what you after?
Edit:
Considered @egreg's comment the centering of
\bowtie
is even better: