public List <bool> Traverse(char symbol, List <bool> data)
            {
                if (NeighbourRight == null && NeighbourLeft == null)
                {
                    return(symbol.Equals(Symbol) ? data : null);
                }

                List <bool> left  = null;
                List <bool> right = null;

                if (NeighbourLeft != null)
                {
                    var leftPath = new List <bool>();
                    leftPath.AddRange(data);
                    leftPath.Add(false);

                    left = NeighbourLeft.Traverse(symbol, leftPath);
                }

                if (NeighbourRight == null)
                {
                    return(left ?? right);
                }
                var rightPath = new List <bool>();

                rightPath.AddRange(data);
                rightPath.Add(true);
                right = NeighbourRight.Traverse(symbol, rightPath);

                return(left ?? right);
            }
            public List <bool> Traverse(char symbol, List <bool> data)
            {
                if (NeighbourRight == null && NeighbourLeft == null)
                {
                    if (symbol.Equals(this.Symbol))
                    {
                        return(data);
                    }
                    else
                    {
                        return(null);
                    }
                }
                else
                {
                    List <bool> left  = null;
                    List <bool> right = null;

                    if (NeighbourLeft != null)
                    {
                        List <bool> leftpath = new List <bool>();
                        leftpath.AddRange(data);
                        leftpath.Add(false);

                        left = NeighbourLeft.Traverse(symbol, leftpath);
                    }

                    if (NeighbourRight != null)
                    {
                        List <bool> rightPath = new List <bool>();
                        rightPath.AddRange(data);
                        rightPath.Add(true);
                        right = NeighbourRight.Traverse(symbol, rightPath);
                    }

                    if (left != null)
                    {
                        return(left);
                    }
                    else
                    {
                        return(right);
                    }
                }
            }