From e6e770e6f1357918dbfedc271f6eafa0c5085dc1 Mon Sep 17 00:00:00 2001 From: Jethendra-17 <146614641+Jethendra-17@users.noreply.github.com> Date: Sat, 21 Oct 2023 23:31:43 +0530 Subject: [PATCH] Create #17 This program first stores the nodes of the given BST in sorted order into an array. Then it constructs a balanced BST from the sorted array using a recursive approach --- #17 | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 #17 diff --git a/#17 b/#17 new file mode 100644 index 0000000..5f0d461 --- /dev/null +++ b/#17 @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; + +public class Node +{ + public int data; + public Node left, right; + + public Node(int d) + { + data = d; + left = right = null; + } +} + +public class BinaryTree +{ + Node root; + List nodes = new List(); + + void storeBSTNodes(Node root) + { + if (root == null) + return; + + storeBSTNodes(root.left); + nodes.Add(root); + storeBSTNodes(root.right); + } + + Node buildTreeUtil(int start, int end) + { + if (start > end) + return null; + + int mid = (start + end) / 2; + Node node = nodes[mid]; + + node.left = buildTreeUtil(start, mid - 1); + node.right = buildTreeUtil(mid + 1, end); + + return node; + } + + Node buildTree(Node root) + { + storeBSTNodes(root); + int n = nodes.Count; + return buildTreeUtil(0, n - 1); + } + + void preOrder(Node node) + { + if (node == null) + return; + + Console.Write(node.data + " "); + preOrder(node.left); + preOrder(node.right); + } + + public static void Main(string[] args) + { + BinaryTree tree = new BinaryTree(); + tree.root = new Node(10); + tree.root.left = new Node(8); + tree.root.left.left = new Node(7); + tree.root.left.left.left = new Node(6); + tree.root.left.left.left.left = new Node(5); + + tree.root = tree.buildTree(tree.root); + + Console.WriteLine("Preorder traversal of balanced BST is :"); + tree.preOrder(tree.root); + } +}