Esempio n. 1
0
        void AssertTreeProperties <T>(RBTree <T> tree) where T : IComparable
        {
            if (tree.root is RBLeaf <T> )
            {
                return;
            }
            RBBranch <T> branch = (RBBranch <T>)tree.root;

            AssertValuesLessThan(branch.left, branch.value);
            AssertValuesGreaterThan(branch.right, branch.value);
        }
Esempio n. 2
0
        void AssertRedNodesHaveBlackChildren <T>(RBNode <T> node) where T : IComparable
        {
            if (node is RBLeaf <T> )
            {
                return;
            }
            RBBranch <T> branch = (RBBranch <T>)node;

            Assert.True(!branch.red || (!branch.left.red && !branch.right.red));
            AssertRedNodesHaveBlackChildren(branch.left);
            AssertRedNodesHaveBlackChildren(branch.right);
        }
Esempio n. 3
0
        void AssertValuesGreaterThan <T>(RBNode <T> node, T min) where T : IComparable
        {
            if (node is RBLeaf <T> )
            {
                return;
            }
            RBBranch <T> branch = (RBBranch <T>)node;

            Assert.Greater(branch.value, min);
            AssertValuesInRange(branch.left, min, branch.value);
            AssertValuesGreaterThan(branch.right, branch.value);
        }
Esempio n. 4
0
        void AssertValuesLessThan <T>(RBNode <T> node, T max) where T : IComparable
        {
            if (node is RBLeaf <T> )
            {
                return;
            }
            RBBranch <T> branch = (RBBranch <T>)node;

            Assert.Less(branch.value, max);
            AssertValuesLessThan(branch.left, branch.value);
            AssertValuesInRange(branch.right, branch.value, max);
        }
Esempio n. 5
0
 void AssertAllLeavesBlack <T>(RBNode <T> node) where T : IComparable
 {
     if (node is RBBranch <T> )
     {
         RBBranch <T> branch = (RBBranch <T>)node;
         AssertAllLeavesBlack(branch.left);
         AssertAllLeavesBlack(branch.right);
     }
     else
     {
         Assert.False(node.red);
     }
 }
Esempio n. 6
0
        int EveryDescendantPathHasTheSameNumberOfBlackNodes <T>(RBNode <T> node) where T : IComparable
        {
            if (node is RBLeaf <T> )
            {
                return(1);
            }
            RBBranch <T> branch      = (RBBranch <T>)node;
            int          leftBlacks  = EveryDescendantPathHasTheSameNumberOfBlackNodes <T> (branch.left);
            int          rightBlacks = EveryDescendantPathHasTheSameNumberOfBlackNodes <T> (branch.right);

            Assert.AreEqual(leftBlacks, rightBlacks);
            if (branch.red)
            {
                return(leftBlacks);
            }
            return(leftBlacks + 1);
        }
Esempio n. 7
0
        public BeachSection BeachSectionContainingPoint(Point point)
        {
            RBBranch <BeachSection> candidate = (RBBranch <BeachSection>)beachSections.root;

            while (true)
            {
                int compareResult = candidate.value.CompareTo(point);
                if (compareResult == 0)
                {
                    return(candidate.value);
                }
                if (compareResult > 0)
                {
                    candidate = (RBBranch <BeachSection>)candidate.left;
                }
                if (compareResult < 0)
                {
                    candidate = (RBBranch <BeachSection>)candidate.right;
                }
            }
        }