using System.Collections.Generic;
public static void Main()
BinarySearchTree bst = new BinarySearchTree();
int[] values = {3, 5, 1, 7, 8, 0, 9};
foreach(var item in values)
bst.BreadthFirstTraversal();
ListNode<int> list1 = new ListNode<int>(1, new ListNode<int>(2, new ListNode<int>(3)));
ListNode<int> list2 = new ListNode<int>(4, new ListNode<int>(5));
Console.WriteLine("Original List 1:");
Console.WriteLine("Original List 2:");
ListNode<int> newList = LinkedListOperations<int>.ReplaceElement(list1, 2, 10);
Console.WriteLine("List 1 after replacing element 2 with 10:");
ListNode<int> concatenatedList = LinkedListOperations<int>.ConcatenateLists(list1, list2);
Console.WriteLine("Concatenated List:");
PrintList(concatenatedList);
static void PrintList(ListNode<int> list)
Console.Write(list.Value);
public int Value { get; set; }
public TreeNode Left { get; set; }
public TreeNode Right { get; set; }
public TreeNode(int value)
public class BinarySearchTree
public void Insert(int value)
root = InsertNode(root, value);
private TreeNode InsertNode(TreeNode node, int value)
return new TreeNode(value);
node.Left = InsertNode(node.Left, value);
else if (value > node.Value)
node.Right = InsertNode(node.Right, value);
public void PreorderTraversal()
Console.WriteLine("Preorder Traversal:");
private void PreorderTraversal(TreeNode node)
Console.Write(node.Value + " ");
PreorderTraversal(node.Left);
PreorderTraversal(node.Right);
public void BreadthFirstTraversal()
Console.WriteLine("Breadth-First Traversal:");
BreadthFirstTraversal(root);
private void BreadthFirstTraversal(TreeNode root)
Queue<TreeNode> queue = new Queue<TreeNode>();
TreeNode current = queue.Dequeue();
Console.Write(current.Value + " ");
if (current.Left != null)
queue.Enqueue(current.Left);
if (current.Right != null)
queue.Enqueue(current.Right);
public readonly ListNode<T> Next;
public ListNode(T value, ListNode<T> next = null)
public ListNode<T> ReplaceNext(ListNode<T> newNext)
return new ListNode<T>(Value, newNext);
public class LinkedListOperations<T>
public static ListNode<T> ReplaceElement(ListNode<T> head, T oldValue, T newValue)
if (head.Value.Equals(oldValue))
return new ListNode<T>(newValue, head.Next);
var newNext = ReplaceElement(head.Next, oldValue, newValue);
return head.ReplaceNext(newNext);
public static ListNode<T> ConcatenateLists(ListNode<T> list1, ListNode<T> list2)
return new ListNode<T>(list1.Value, ConcatenateLists(list1.Next, list2));