Example #1
0
        /**
         * 1. If the node is leaf and the current Trees' symbol matches return the data or null
         * 2. If the left node is not null then initialize a new set of left nodes and add the data to each. Set next to bin 0
         * 3. If the right node is not null then initialize a new set of right nodes and add the data to each. Set next to bin 1
         */
        public List <Boolean> Walk(Char symbol, List <Boolean> data)
        {
            if (RightNode == null && LeftNode == null)
            {
                return(symbol.Equals(NodeSymbol) ? data : null);
            }

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

            if (LeftNode != null)
            {
                List <Boolean> leftNodes = new List <Boolean>();

                for (Int32 i = 0; i < data.Count; i++)
                {
                    leftNodes.Add(data[i]);
                }

                // Set to bin 0
                leftNodes.Add(false);

                left = LeftNode.Walk(symbol, leftNodes);
            }

            if (RightNode != null)
            {
                List <Boolean> rightNodes = new List <Boolean>();

                for (Int32 i = 0; i < data.Count; i++)
                {
                    rightNodes.Add(data[i]);
                }

                // Set to bin 1
                rightNodes.Add(true);

                right = RightNode.Walk(symbol, rightNodes);
            }

            // Left is not null then left else right
            return(left ?? right);
        }