Advertisement
Layvu

DS1

May 15th, 2023
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.11 KB | None | 0 0
  1. namespace BinaryTreeMerge;
  2.  
  3. public class Program
  4. {
  5.     public static void Main()
  6.     {
  7.         var tree1 = new BinaryTree();
  8.         tree1.Insert(3);
  9.         tree1.Insert(1);
  10.         tree1.Insert(2);
  11.  
  12.         var tree2 = new BinaryTree();
  13.         tree2.Insert(2);
  14.         tree2.Insert(8);
  15.         tree2.Insert(5);
  16.  
  17.         var mergedTree = BinaryTree.Merge(tree1, tree2);
  18.     }
  19. }
  20.    
  21. public class TreeNode
  22. {
  23.     public int Value { get; }
  24.     public TreeNode Left { get; set; }
  25.     public TreeNode Right { get; set; }
  26.  
  27.     public TreeNode(int value)
  28.     {
  29.         Value = value;
  30.     }
  31. }
  32.  
  33. public class BinaryTree
  34. {
  35.     public TreeNode Root { get; set; }
  36.  
  37.     public void Insert(int value)
  38.     {
  39.         if (Root == null)
  40.         {
  41.             Root = new TreeNode(value);
  42.             return;
  43.         }
  44.  
  45.         var currentNode = Root;
  46.         var newNode = new TreeNode(value);
  47.  
  48.         while (true)
  49.         {
  50.             if (value < currentNode.Value)
  51.             {
  52.                 if (currentNode.Left == null)
  53.                 {
  54.                     currentNode.Left = newNode;
  55.                     return;
  56.                 }
  57.                 currentNode = currentNode.Left;
  58.             }
  59.             else
  60.             {
  61.                 if (currentNode.Right == null)
  62.                 {
  63.                     currentNode.Right = newNode;
  64.                     return;
  65.                 }
  66.                 currentNode = currentNode.Right;
  67.             }
  68.         }
  69.     }
  70.  
  71.     public static BinaryTree Merge(BinaryTree tree1, BinaryTree tree2)
  72.     {
  73.         if (tree1 == null || tree1.Root == null) return tree2;
  74.         if (tree2 == null || tree2.Root == null) return tree1;
  75.  
  76.         var minTree = tree1.Root.Value <= tree2.Root.Value ? tree1 : tree2;
  77.         var maxTree = minTree == tree1 ? tree2 : tree1;
  78.         var maxNode = FindLargestNode(minTree.Root);
  79.        
  80.         maxNode.Right = maxTree.Root;
  81.  
  82.         return minTree;
  83.     }
  84.  
  85.     private static TreeNode FindLargestNode(TreeNode node)
  86.     {
  87.         while (node.Right != null) node = node.Right;
  88.         return node;
  89.     }
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement