Creando nodos para un árbol binario

Creando nodos para un árbol binario

Me gustaría crear un binario para la visualización de funciones comunes del árbol binario de C. He usado rectángulos divididos pero sin éxito. Actualmente tengo el siguiente MWE:

\documentclass[12pt]{article}
\usepackage[a4paper,margin=1in,showframe]{geometry}
\usepackage{tikz}
\usetikzlibrary{
  chains,
  shapes.multipart,
}
\begin{document}
\begin{figure}[!ht]
\centering
\begin{tikzpicture}[
  line width=1pt,
  font=\small\ttfamily,
  list/.style={
     rectangle split,
     rectangle split parts=3,
     draw,
     minimum width=1.8cm,
  },
  start chain,
  chain default direction=down
]
   \node[list,on chain] (A) {43 \nodepart{two} Name}; 
   \draw (A.three north) -- (A.three south);
   \node[list,on chain] (B) {54 \nodepart{two} Jesse}; 
\end{tikzpicture}
\end{figure}
\end{document}

El nodo de la izquierda tiene una línea dividida de norte a sur, pero me gustaría esa línea solo en la tercera parte del rectángulo como se muestra a la derecha. ¿Cómo puedo hacer esto?

ingrese la descripción de la imagen aquí

Respuesta1

Puedes usar append after commandpara eso.

\documentclass[12pt]{article}
\usepackage[a4paper,margin=1in,showframe]{geometry}
\usepackage{tikz}
\usetikzlibrary{
  chains,
  shapes.multipart,
}
\begin{document}
\begin{figure}[!ht]
\centering
\begin{tikzpicture}[
  line width=1pt,
  font=\small\ttfamily,
  list/.style={
     rectangle split,
     rectangle split parts=3,
     draw,
     minimum width=1.8cm,
     append after command={(\tikzlastnode.south)
     edge (\tikzlastnode.two split)}
  },
  start chain=going below,
  %chain default direction=down
]
   \node[list,on chain] (A) {43 \nodepart{two} Name}; 
   \node[list,on chain] (B) {54 \nodepart{two} Jesse}; 
\end{tikzpicture}
\end{figure}
\end{document}

ingrese la descripción de la imagen aquí

Respuesta2

Intentaría hacer las cosas manualmente, porque es más fácil personalizarlo todo.

ingrese la descripción de la imagen aquí

\documentclass[12pt]{article}
\usepackage[T1]{fontenc}
\usepackage[a4paper,margin=1in]{geometry}
\usepackage{expl3}
\usepackage{tikz}

\usetikzlibrary{scopes}

\begin{document}


\ExplSyntaxOn


\dim_new:N \g_doc_node_width_dim
\dim_new:N \g_doc_node_height_dim

\dim_gset:Nn \g_doc_node_width_dim {3cm}
\dim_gset:Nn \g_doc_node_height_dim {1cm}

\tikzset{
  mynode/.style={
    outer~sep=0pt,
    inner~sep=0pt,
    draw=black,
    rectangle,
    minimum~height=\g_doc_node_height_dim,
    execute~at~begin~node={\ttfamily\small\centering},
    execute~at~end~node={\par}
  }
}

% x, y, text, width
\cs_set:Npn \doc_draw_node:NNnn #1#2#3#4 {
  \node[mynode,anchor=north~west,minimum~width=#4,text~width=#4] at (\dim_use:N #1, \dim_use:N #2) {#3};
}

\cs_generate_variant:Nn \doc_draw_node:NNnn {NNxx}

% x, y, fields separated by comma, bbox_name
\cs_set:Npn \doc_draw_tree_node:nnnn #1#2#3#4 {
  \dim_gset:Nn \g_tmpa_dim {#1} % x
  \dim_gset:Nn \g_tmpb_dim {#2} % y
  \clist_gset:Nn \g_tmpa_clist {#3}
  
  \begin{scope}[local~bounding~box={#4}]
    \doc_draw_node:NNxx \g_tmpa_dim \g_tmpb_dim {\clist_item:Nn \g_tmpa_clist {1}} 
      {\g_doc_node_width_dim}
    \dim_gsub:Nn \g_tmpb_dim {\g_doc_node_height_dim}
    \doc_draw_node:NNxx \g_tmpa_dim \g_tmpb_dim {\clist_item:Nn \g_tmpa_clist {2}} 
      {\g_doc_node_width_dim}
    \dim_gsub:Nn \g_tmpb_dim {\g_doc_node_height_dim}
    \doc_draw_node:NNxx \g_tmpa_dim \g_tmpb_dim {\clist_item:Nn \g_tmpa_clist {3}} 
      {0.5\g_doc_node_width_dim}
    \dim_gadd:Nn \g_tmpa_dim {0.5\g_doc_node_width_dim}
    \doc_draw_node:NNxx \g_tmpa_dim \g_tmpb_dim {\clist_item:Nn \g_tmpa_clist {4}} 
      {0.5\g_doc_node_width_dim}
  \end{scope}
}

\cs_set_eq:NN \treenode \doc_draw_tree_node:nnnn

\ExplSyntaxOff

\begin{figure}[!ht]
\centering
\begin{tikzpicture}
\treenode{-2cm}{0cm}{43, Name, 0x00, 0x01}{node1}
\treenode{2cm}{0cm}{50, Jessie, 0x02, 0x04}{node2}
\node[anchor=north, draw=black] (node3) at (1cm, -4cm) {test node};
\draw (node1.south)--(node3);
\draw (node2.south)--(node3);
\end{tikzpicture}
\end{figure}
\end{document}

información relacionada