//This function prints the trie depth first public void PrintDepthFirst() { ArrayList toVisit = new ArrayList(root.Children); ArrayList Visited = new ArrayList(); ArrayList AddList = new ArrayList(); Console.WriteLine("#########"); while (toVisit.Count != 0) { ParsedTreeNode node = (ParsedTreeNode)toVisit[0]; Console.WriteLine(node); if (node.IsLeaf() == false) { foreach (ParsedTreeNode toAdd in node.Children) { if (!Visited.Contains(toAdd)) { AddList.Add(toAdd); } } } toVisit.Remove(node); toVisit.InsertRange(0, AddList); Visited.Add(node); AddList.Clear(); } Console.WriteLine("#########"); }
public void SetAST() { AST = new ParsedTreeNode(-1, Tokens.EMPTY, null); ArrayList toVisit = new ArrayList { root }; ArrayList Visited = new ArrayList(); ArrayList Operators = new ArrayList { Tokens.Plus, Tokens.Minus, Tokens.Multiply, Tokens.Divide, Tokens.Exponent, Tokens.Equal }; ParsedTreeNode lastOp = AST; while (toVisit.Count != 0) { ParsedTreeNode node = (ParsedTreeNode)toVisit[0]; if (Operators.Contains(node.Value)) { lastOp.Children.Add(node); lastOp = node; } else if (!(node.Value is null) && !(node.ToString().Contains("<<"))) { lastOp.Children.Add(node); } if (node.IsLeaf() == false) { foreach (ParsedTreeNode toAdd in node.Children) { if (!Visited.Contains(toAdd)) { toVisit.Add(toAdd); } } } toVisit.Remove(node); Visited.Add(node); } }
//This function adds new nodes to the trie using their depth and parent value public void AddNewNode(int depth, object parentValue, object value) { if (root.IsLeaf()) { root.Children.Add(new ParsedTreeNode(depth, parentValue, value)); return; } ArrayList toVisit = new ArrayList(root.Children); ArrayList Visited = new ArrayList(); while (toVisit.Count != 0) { ParsedTreeNode node = (ParsedTreeNode)toVisit[0]; if (node.Value == parentValue && node.Depth == depth - 1) { node.Children.Add(new ParsedTreeNode(depth, parentValue, value)); if (depth > Deepest_node) { Deepest_node = depth; } return; } else { if (node.IsLeaf() == false) { foreach (ParsedTreeNode toAdd in node.Children) { if (!Visited.Contains(toAdd)) { toVisit.Insert(0, toAdd); } } } toVisit.Remove(node); Visited.Add(node); } } }