private static int Bfs(AdvancedNode root)
        {
            Queue <AdvancedNode> queue = new Queue <AdvancedNode>();

            queue.Enqueue(root);
            int total = 0;

            while (queue.Count != 0)
            {
                AdvancedNode advancedNode = queue.Dequeue();

                if (advancedNode.NodeTypes.Contains(NodeType.Child))
                {
                    total += advancedNode.Node.val;
                }

                if (advancedNode.Node.val % 2 == 0)
                {
                    if (advancedNode.Left != null)
                    {
                        advancedNode.Left.NodeTypes.Add(NodeType.Parent);
                    }
                    if (advancedNode.Right != null)
                    {
                        advancedNode.Right.NodeTypes.Add(NodeType.Parent);
                    }
                }

                if (advancedNode.NodeTypes.Contains(NodeType.Parent))
                {
                    if (advancedNode.Left != null)
                    {
                        advancedNode.Left.NodeTypes.Add(NodeType.Child);
                    }
                    if (advancedNode.Right != null)
                    {
                        advancedNode.Right.NodeTypes.Add(NodeType.Child);
                    }
                }

                if (advancedNode.Left != null)
                {
                    queue.Enqueue(advancedNode.Left);
                }

                if (advancedNode.Right != null)
                {
                    queue.Enqueue(advancedNode.Right);
                }
            }

            return(total);
        }
        private static AdvancedNode MakeAdvancedNodes(TreeNode node)
        {
            if (node != null)
            {
                AdvancedNode newNode = new AdvancedNode(node);
                newNode.Left  = MakeAdvancedNodes(node.left);
                newNode.Right = MakeAdvancedNodes(node.right);

                return(newNode);
            }

            return(null);
        }
예제 #3
0
    public static void TestMethod()
    {
        DataStructure <char, AdvancedNode <char> > d =
            new DataStructure <char, AdvancedNode <char> >();

        d.RootNode          = new AdvancedNode <char>();
        d.RootNode.NextNode = new AdvancedNode <char>();
        // type NO error! Will compile
        AdvancedNode <char> y = d.RootNode.NextNode;
        var rootNode          = d.RootNode;
        var lastNode          = rootNode.GetLastNode();

        Console.WriteLine("Is y the last node? " + (lastNode == y));
        Console.WriteLine("Is rootNode the last node? " + (lastNode == rootNode));
    }