fork download
  1. /* cs */
  2.  
  3. class Node {
  4. private int key;
  5. private Node left, right;
  6. public Node(int key) {
  7. this.left = this.right = null;
  8. this.key = key;
  9. }
  10. public static void insertNode(ref Node root, int key) {
  11. if (root == null) {
  12. root = new Node(key);
  13. return;
  14. }
  15. if (key < root.key)
  16. insertNode(ref root.left, key);
  17. else
  18. insertNode(ref root.right, key);
  19. }
  20.  
  21. public static bool deleteNode(ref Node root, int key) {
  22. if (root == null) return false;
  23. if (key < root.key)
  24. return deleteNode(ref root.left, key);
  25. else if (key > root.key)
  26. return deleteNode(ref root.right, key);
  27. else {
  28. if (root.left == null) {
  29. root = root.right;
  30. } else if (root.right == null) {
  31. root = root.left;
  32. } else { // root.left != null && root.right != null
  33. Node p;
  34. for (p = root.left; p.right != null; p = p.right)
  35. ;
  36. p.right = root.right;
  37. root = root.left;
  38. }
  39. }
  40. return true;
  41. }
  42.  
  43. public void vomitTree(int c) {
  44. if (this.left != null)
  45. this.left.vomitTree(c + 3);
  46. for (int i = 0; i < c; i++) System.Console.Write(' ');
  47. System.Console.WriteLine(this.key);
  48. if (this.right != null)
  49. this.right.vomitTree(c + 3);
  50. }
  51. };
  52.  
  53. class BinaryTree {
  54. private Node root;
  55. public BinaryTree() { this.root = null; }
  56. public void insertNode(int key) { Node.insertNode(ref this.root, key); }
  57. public bool deleteNode(int key) { return Node.deleteNode(ref this.root, key); }
  58. public void vomitTree() { if (this.root != null) this.root.vomitTree(0); }
  59. };
  60.  
  61. class Sample{
  62. public static void Main() {
  63. BinaryTree tree = new BinaryTree();
  64. for (;;) {
  65. //System.Console.Write("> ");
  66. int input = int.Parse(System.Console.ReadLine());
  67. if (input < 0)
  68. break;
  69. tree.insertNode(input);
  70. tree.vomitTree();
  71. }
  72. System.Console.WriteLine("deleting.");
  73. for (;;) {
  74. //System.Console.Write("> ");
  75. int input = int.Parse(System.Console.ReadLine());
  76. if (input < 0)
  77. break;
  78. if (tree.deleteNode(input))
  79. System.Console.WriteLine("deleted.");
  80. else
  81. System.Console.WriteLine("not found.");
  82. tree.vomitTree();
  83. }
  84. }
  85. }
  86. /* end */
  87.  
Success #stdin #stdout 0.03s 33936KB
stdin
10
5
15
1
8
12
20
-1
5
10
15
100
8
12
20
100
1
1
-1
stdout
10
   5
10
   5
10
   15
      1
   5
10
   15
      1
   5
      8
10
   15
      1
   5
      8
10
      12
   15
      1
   5
      8
10
      12
   15
      20
deleting.
deleted.
   1
      8
10
      12
   15
      20
deleted.
1
   8
         12
      15
         20
deleted.
1
   8
      12
         20
not found.
1
   8
      12
         20
deleted.
1
   12
      20
deleted.
1
   20
deleted.
1
not found.
1
deleted.
not found.