コード例 #1
0
        public static NodeWithParent Book4dot8Example()
        {
            NodeWithParent node3  = new NodeWithParent(3);
            NodeWithParent node5  = new NodeWithParent(5);
            NodeWithParent node7  = new NodeWithParent(7);
            NodeWithParent node10 = new NodeWithParent(10);
            NodeWithParent node15 = new NodeWithParent(15);
            NodeWithParent node17 = new NodeWithParent(17);
            NodeWithParent node20 = new NodeWithParent(20);
            NodeWithParent node30 = new NodeWithParent(30);

            node20.right = node30;
            node20.left  = node10;

            node30.parent = node20;

            node10.parent = node20;
            node10.left   = node5;
            node10.right  = node15;

            node15.parent = node10;
            node15.right  = node17;

            node5.parent = node10;
            node5.left   = node3;
            node5.right  = node7;

            node3.parent = node5;

            node7.parent = node5;

            node17.parent = node15;

            return(node20);
        }
        int GetDepth(NodeWithParent node)
        {
            NodeWithParent runnerNode = new NodeWithParent(0);

            runnerNode = node;

            int count = 0;

            while (runnerNode != null)
            {
                count++;
                runnerNode = runnerNode.parent;
            }

            return(count);
        }
        public void _4_8_FirstCommonAncestor()
        {
            //Arrange
            NodeWithParent node1  = new NodeWithParent(1);
            NodeWithParent node2  = new NodeWithParent(2);
            NodeWithParent node3  = new NodeWithParent(3);
            NodeWithParent node4  = new NodeWithParent(4);
            NodeWithParent node5  = new NodeWithParent(5);
            NodeWithParent node6  = new NodeWithParent(6);
            NodeWithParent node7  = new NodeWithParent(7);
            NodeWithParent node8  = new NodeWithParent(8);
            NodeWithParent node9  = new NodeWithParent(9);
            NodeWithParent node10 = new NodeWithParent(10);

            node1.left  = node2;
            node1.right = node3;

            node2.parent = node1;
            node2.left   = node4;

            node3.parent = node1;
            node3.left   = node5; node3.right = node6;

            node4.parent = node2;
            node4.right  = node7;

            node5.parent = node3;

            node6.parent = node3;
            node6.left   = node8; node6.right = node9;

            node7.parent = node4;

            node8.parent = node6;
            node8.right  = node10;

            node9.parent = node6;

            node10.parent = node8;

            //Act
            NodeWithParent result = _practice.Problem_4_8(node8, node9);

            //Assert
            Assert.AreSame(node6, result);
        }
コード例 #4
0
        NodeWithParent InorderSuccessor(NodeWithParent treeNode)
        {
            if (treeNode.right != null)
            {
                NodeWithParent n;
                n = treeNode.right;

                while (n.left != null)
                {
                    n = n.left;
                }

                return(n);
            }

            NodeWithParent m = treeNode.parent;

            while (m != null && treeNode.data > m.data)
            {
                m = m.parent;
            }

            return(m);
        }
        NodeWithParent FirstCommonAncestorWithParents(NodeWithParent node1, NodeWithParent node2)
        {
            int depth1 = GetDepth(node1);
            int depth2 = GetDepth(node2);

            int difference = Math.Abs(depth1 - depth2);

            if (depth1 < depth2)
            {
                for (int i = 0; i < difference; i++)
                {
                    node2 = node2.parent;
                }
            }

            if (depth2 < depth1)
            {
                for (int i = 0; i < difference; i++)
                {
                    node1 = node1.parent;
                }
            }

            while (node1.parent != null && node2.parent != null && node1 != node2)
            {
                node1 = node1.parent;
                node2 = node2.parent;
            }

            if (node1 == node2)
            {
                return(node1);
            }

            return(null);
        }
コード例 #6
0
        public void _4_6_Successor()
        {
            //Arrange
            NodeWithParent node1  = new NodeWithParent(1);
            NodeWithParent node2  = new NodeWithParent(2);
            NodeWithParent node3  = new NodeWithParent(3);
            NodeWithParent node4  = new NodeWithParent(4);
            NodeWithParent node5  = new NodeWithParent(5);
            NodeWithParent node6  = new NodeWithParent(6);
            NodeWithParent node7  = new NodeWithParent(7);
            NodeWithParent node8  = new NodeWithParent(8);
            NodeWithParent node9  = new NodeWithParent(9);
            NodeWithParent node10 = new NodeWithParent(10);
            NodeWithParent node11 = new NodeWithParent(11);

            node1.parent = node2;

            node2.left   = node1;
            node2.right  = node3;
            node2.parent = node4;

            node3.parent = node2;

            node4.left   = node2;
            node4.right  = node5;
            node4.parent = node6;

            node5.parent = node4;

            node6.left  = node4;
            node6.right = node8;

            node7.parent = node8;

            node8.left   = node7;
            node8.right  = node10;
            node8.parent = node6;

            node9.parent = node10;

            node10.left   = node9;
            node10.right  = node11;
            node10.parent = node8;

            node11.parent = node10;

            //Act
            var result1  = _practice.Problem_4_6(node1);
            var result2  = _practice.Problem_4_6(node2);
            var result3  = _practice.Problem_4_6(node3);
            var result4  = _practice.Problem_4_6(node4);
            var result5  = _practice.Problem_4_6(node5);
            var result6  = _practice.Problem_4_6(node6);
            var result7  = _practice.Problem_4_6(node7);
            var result8  = _practice.Problem_4_6(node8);
            var result9  = _practice.Problem_4_6(node9);
            var result10 = _practice.Problem_4_6(node10);
            var result11 = _practice.Problem_4_6(node11);

            //Assert
            Assert.AreEqual(node2, result1);
            Assert.AreEqual(node3, result2);
            Assert.AreEqual(node4, result3);
            Assert.AreEqual(node5, result4);
            Assert.AreEqual(node6, result5);
            Assert.AreEqual(node7, result6);
            Assert.AreEqual(node8, result7);
            Assert.AreEqual(node9, result8);
            Assert.AreEqual(node10, result9);
            Assert.AreEqual(node11, result10);
            Assert.AreEqual(null, result11);
        }
コード例 #7
0
 public NodeWithParent Problem_4_6(NodeWithParent treeNode)
 {
     return(InorderSuccessor(treeNode));
 }
 public NodeWithParent Problem_4_8(NodeWithParent node1, NodeWithParent node2)
 {
     return(FirstCommonAncestorWithParents(node1, node2));
 }