コード例 #1
0
ファイル: Program.cs プロジェクト: vshardul/RandomStuff
        private static TreeNode CreateTree(Node current)
        {
            if (current == null)
            {
                return null;
            }

            var root = new TreeNode { value = current.value };
            var currentT = root;
            current = current.next;

            int i = 1;
            var treeQueue = new Queue<TreeNode>();
            while (current != null)
            {
                var treeNode = new TreeNode { value = current.value };
                current = current.next;
                if (i == 1)
                {
                    currentT.left = treeNode;
                    treeQueue.Enqueue(currentT.left);
                    i++;
                }
                else if (i == 2)
                {
                    currentT.right = treeNode;
                    treeQueue.Enqueue(currentT.right);
                    i++;
                }

                if(i >= 3)
                {
                    i = 1;
                    currentT = treeQueue.Dequeue();
                }
            }

            return root;
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: vshardul/RandomStuff
        private static TreeNode CreateTreeFromInorderPreorder(List<int> inorderList, List<int> preorderList, ref int preorderIndex)
        {
            if (!inorderList.Any() || !preorderList.Any() || preorderIndex >= preorderList.Count)
            {
                return null;
            }

            preorderIndex = preorderIndex + 1;
            var root = new TreeNode { value = preorderList[preorderIndex] };
            var rootIndex = inorderList.IndexOf(preorderList[preorderIndex]);

            var inorderLeft = inorderList.Where((value, index) => index < rootIndex).ToList();
            var inorderRight = inorderList.Where((value, index) => index > rootIndex).ToList();

            //var preorderLeft = preorderList.Where(inorderLeft.Contains).ToList();
            //var preorderRight = preorderList.Where(inorderRight.Contains).ToList();

            root.left = CreateTreeFromInorderPreorder(inorderLeft, preorderList, ref preorderIndex);
            root.right = CreateTreeFromInorderPreorder(inorderRight, preorderList, ref preorderIndex);

            return root;
        }
コード例 #3
0
ファイル: Program.cs プロジェクト: vshardul/RandomStuff
        private static void PrintTreePreOrder(TreeNode head)
        {
            if (head == null)
            {
                return;
            }

            Console.Write(head.value + " ");
            PrintTreePreOrder(head.left);
            PrintTreePreOrder(head.right);
        }
コード例 #4
0
ファイル: Program.cs プロジェクト: vshardul/RandomStuff
        private static void PrintTreeLevelByLevel(TreeNode head)
        {
            var nodeQueue = new Queue<TreeNode>();
            nodeQueue.Enqueue(head);

            while (nodeQueue.Count > 0)
            {
                var tempQueue = new Queue<TreeNode>();
                while (nodeQueue.Count > 0)
                {
                    var node = nodeQueue.Dequeue();
                    if (node != null)
                    {
                        Console.Write(node.value + " ");
                        tempQueue.Enqueue(node.left);
                        tempQueue.Enqueue(node.right);
                    }
                }

                Console.WriteLine();
                nodeQueue = tempQueue;
            }
        }
コード例 #5
0
ファイル: Program.cs プロジェクト: vshardul/RandomStuff
        private static void PrintTree(TreeNode root)
        {
            Console.WriteLine("Preorder ");
            PrintTreePreOrder(root);
            Console.WriteLine();

            Console.WriteLine("Inorder ");
            PrintTreeInOrder(root);
            Console.WriteLine();

            Console.WriteLine("PostOrder ");
            PrintTreePostOrder(root);
            Console.WriteLine();

            Console.WriteLine("Print level by level ");
            PrintTreeLevelByLevel(root);
            Console.WriteLine();
        }
コード例 #6
0
ファイル: Program.cs プロジェクト: vshardul/RandomStuff
        private static bool IsBST(TreeNode node)
        {
            if (node != null)
            {
                var left = node.left != null ? node.left.value : int.MinValue;
                var right = node.right != null ? node.right.value : int.MaxValue;
                if (left > node.value || node.value > right)
                {
                    return false;
                }

                return IsBST(node.left) && IsBST(node.right);
            }

            return true;
        }
コード例 #7
0
ファイル: Program.cs プロジェクト: vshardul/RandomStuff
        private static void InsertBST(ref TreeNode root, int value)
        {
            if (root == null)
            {
                root = new TreeNode { value = value };
                return;
            }

            if (root.value <= value)
            {
                InsertBST(ref root.right, value);
            }
            else
            {
                InsertBST(ref root.left, value);
            }
        }
コード例 #8
0
ファイル: Program.cs プロジェクト: vshardul/RandomStuff
        private static TreeNode GetLowestCommonAncestor(TreeNode root, int input1, int input2)
        {
            if (root == null)
            {
                return null;
            }

            if (root.value >= input1 && root.value <= input2)
            {
                return root;
            }

            if (root.value < input1 && root.value < input2)
            {
                return GetLowestCommonAncestor(root.right, input1, input2);
            }

            return GetLowestCommonAncestor(root.left, input1, input2);
        }