Esempio n. 1
0
        static int MaxPathSum(Node root, MaxPath mp)
        {
            if (root == null)
            {
                return(0);
            }

            int lsum = MaxPathSum(root.Left, mp);
            int rsum = MaxPathSum(root.Right, mp);

            int maxOfChilds = Math.Max(lsum, rsum);

            int maxwithRoot = Math.Max(root.value, root.value + maxOfChilds);

            int sumOfallthree = lsum + rsum + root.value;

            int maxpathSumFortheRoot = Math.Max(maxwithRoot, sumOfallthree);

            //Now compare with what we have in the reference object
            if (mp.Value < maxpathSumFortheRoot)
            {
                mp.Value = maxpathSumFortheRoot;
            }

            //now return the max path so far
            return(maxwithRoot);
        }
Esempio n. 2
0
        static void Main(string[] args)
        {
            Node n1 = new Node(1);

            Node n2 = new Node(2);
            Node n3 = new Node(3);

            Node n4 = new Node(4);
            Node n5 = new Node(5);

            Node n6 = new Node(6);
            Node n7 = new Node(7);

            Node n8  = new Node(8);
            Node n9  = new Node(9);
            Node n10 = new Node(10);

            n1.Left  = n2;
            n1.Right = n3;

            n2.Left  = n4;
            n2.Right = n5;

            n3.Left  = n6;
            n3.Right = n7;

            n6.Left = n8;

            n7.Right = n9;

            n4.Left = n10;

            Console.WriteLine($"{9} is {GetLevel(n1, 9, 0)}");
            Console.WriteLine($"{1} is {GetLevel(n1, 1, 0)}");
            Console.WriteLine($"{20} is {GetLevel(n1, 20, 0)}");

            Console.WriteLine($"LCA of {n8.value} and {n9.value} is :{FindLCA(n1, n8.value, n9.value).value}");
            var res = FindLCA(n1, 20, 30);

            Console.WriteLine($"LCA of {n8.value} and {n9.value} is :{res?.value}");
            Console.WriteLine($"LCA of {n4.value} and {n9.value} is :{FindLCA(n1, n4.value, n9.value).value}");

            // Console.WriteLine($"LCA of {n6.value} {n8.value} and {n9.value} is :{FindLCA(n1, new List<int> { 6,8,9 }).value}");
            Console.WriteLine($"LCA of {n6.value} {n8.value} and {n9.value} is :{FindLCAOfListOfNodes(n1, new List<Node> { n6,n8,n9}).value}");
            Console.WriteLine($"LCA of {n4.value} {n6.value} and {n9.value} is :{FindLCAOfListOfNodes(n1, new List<Node> { n4, n6, n9 }).value}");
            Console.WriteLine($"LCA of {n6.value} {n8.value} and {n3.value} is :{FindLCAOfListOfNodes(n1, new List<Node> { n6, n8 ,n3 }).value}");
            //Console.WriteLine($"LCA of {n3.value} and {n9.value} is :{FindLCA(n1, n3.value, n9.value).value}");
            //Console.WriteLine($"LCA of {n3.value} and {n9.value} is :{FindLCA(n1, n3.value, n9.value).value}");
            //Console.WriteLine($"LCA of {n3.value} and {n9.value} is :{FindLCA(n1, n3.value, n9.value).value}");
            //PrintRelation(n1, 8, 9);

            PrintRelation(n1, 6, 7);

            PrintRelation(n1, 3, 7);
            PrintRelation(n1, 7, 3);

            PrintRelation(n1, 3, 9);
            PrintRelation(n1, 9, 3);

            PrintRelation(n1, 1, 9);
            PrintRelation(n1, 9, 1);

            PrintRelation(n1, 4, 9);

            PrintRelation(n1, 10, 9);

            PrintRelation(n1, 20, 30);

            MaxPath mp = new MaxPath();

            MaxPathSum(n1, mp);
            Console.WriteLine($"Max Path Sum = {mp.Value }");


            Node n_10 = new Node(10);

            Node n_2     = new Node(2);
            Node n2nd_10 = new Node(10);

            Node n_20 = new Node(20);
            Node n_1  = new Node(1);

            Node n_25 = new Node(-25);
            Node n_3  = new Node(3);
            Node n_4  = new Node(4);

            //http://www.geeksforgeeks.org/find-maximum-path-sum-in-a-binary-tree/

            n_10.Left  = n_2;
            n_10.Right = n2nd_10;

            n_2.Left  = n_20;
            n_2.Right = n_1;


            n2nd_10.Right = n_25;

            n_25.Left  = n_3;
            n_25.Right = n_4;


            mp = new MaxPath();
            MaxPathSum(n_10, mp);
            Console.WriteLine($"Max Path Sum = {mp.Value }");

            Console.ReadKey();
        }