As bordas da árvore Tikz sempre se conectam aos elementos na parte superior central

As bordas da árvore Tikz sempre se conectam aos elementos na parte superior central
\documentclass[]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc,fit,shapes.geometric}
\usepackage{amssymb}

\begin{document}
\begin{tikzpicture}[]
\tikzstyle{tree_op}=[rectangle,draw=black,fill=gray!30,thick,minimum size=6mm,inner sep=0pt]
\tikzstyle{tree_subtree}=[rectangle,draw = black,densely dotted,fill=gray!30,thick,minimum size=6mm,inner sep=0pt]
\tikzstyle{triangle}=[inner sep=0pt,text=red,draw, regular polygon, regular polygon sides=3, align=center]

\tikzstyle{level 1}=[sibling distance=14mm,level distance=10mm]
\tikzstyle{level 2}=[sibling distance=14mm]
\tikzstyle{level 3}=[sibling distance=20mm]
\tikzstyle{level 4}=[sibling distance=11mm,level distance=11mm]

\node [tree_op] (root){$\rightarrow $}
  child {node [triangle] (t1) {$\triangle_1$}}
  child {node [triangle] (ti) {$\triangle_i$}}
  child {node [triangle] (tj) {$\triangle_j$}}
  child {node [triangle] (tn) {$\triangle_n$}}
;

\end{tikzpicture}
\end{document}

insira a descrição da imagem aqui

Tenho dois problemas com o resultado atual:

  1. triângulos têm dimensões diferentes
  2. as bordas devem se conectar ao vértice do triangular

Responder1

Para resolver seus problemas, adicionei

  1. um equal sizeestilo (que depende de eqparbox) que garante que os nós tenham tamanhos iguais e
  2. child anchor=north.

Observe que \tikzstyleestá obsoleto, por isso o substituí pela \tikzsetsintaxe correspondente. (Eu também aumentei, level distancemas é claro que você pode desfazer isso se não gostar.)

\documentclass[]{standalone}
\usepackage{tikz}
\usepackage{eqparbox}
\newbox\nodebox
\usetikzlibrary{trees,shapes.geometric}
\usepackage{amssymb}

\begin{document}
\begin{tikzpicture}[]
\tikzset{tree_op/.style={rectangle,draw=black,fill=gray!30,thick,minimum size=6mm,inner sep=0pt},
tree_subtree/.style={rectangle,draw = black,densely dotted,fill=gray!30,thick,minimum size=6mm,inner sep=0pt},
triangle/.style={inner sep=0pt,text=red,draw, regular polygon, regular polygon
sides=3, align=center,equal size=T},
level 1/.style={sibling distance=14mm,level distance=14mm},
level 2/.style={sibling distance=14mm},
level 3/.style={sibling distance=20mm},
level 4/.style={sibling distance=11mm,level distance=11mm},
equal size/.style={execute at begin
 node={\setbox\nodebox=\hbox\bgroup},
 execute at end
 node={\egroup\eqmakebox[#1][c]{\copy\nodebox}}}}

\node [tree_op] (root){$\rightarrow $}
[child anchor=north]
  child {node [triangle] (t1) {$\triangle_1$}}
  child {node [triangle] (ti) {$\triangle_i$}}
  child {node [triangle] (tj) {$\triangle_j$}}
  child {node [triangle] (tn) {$\triangle_n$}}
;

\end{tikzpicture}
\end{document}

insira a descrição da imagem aqui

informação relacionada