1- // @dart=2.9
21import 'adt/binary_tree_adt.dart' ;
32import 'binary_tree.dart' ;
43
@@ -11,7 +10,7 @@ import 'binary_tree.dart';
1110class BinarySearchTree <V extends Comparable >
1211 extends BinaryTreeADT <BinaryNode <V >, V > {
1312 /// Root of the tree
14- BinaryNode <V > root;
13+ BinaryNode <V >? root;
1514
1615 /// Creates an empty BST.
1716 BinarySearchTree ();
@@ -32,7 +31,7 @@ class BinarySearchTree<V extends Comparable>
3231 if (isEmpty) {
3332 root = node;
3433 } else {
35- _compareAndAdd (root, node);
34+ _compareAndAdd (root! , node);
3635 }
3736 }
3837
@@ -48,7 +47,7 @@ class BinarySearchTree<V extends Comparable>
4847 @override
4948 void delete (V value) {
5049 if (! isEmpty) {
51- root = _delete (root, value);
50+ root = _delete (root! , value);
5251 }
5352 }
5453
@@ -66,30 +65,30 @@ class BinarySearchTree<V extends Comparable>
6665 return ;
6766 }
6867
69- if (node.value.compareTo (newNode.value) > 0 ) {
68+ if (node.value! .compareTo (newNode.value) > 0 ) {
7069 if (node.left == null ) {
7170 // newNode has lower value and becomes left child of the node.
7271 node.left = newNode;
7372 } else {
74- _compareAndAdd (node.left, newNode);
73+ _compareAndAdd (node.left! , newNode);
7574 }
7675 } else {
7776 if (node.right == null ) {
7877 // newNode has greater value and becomes right child of node.
7978 node.right = newNode;
8079 } else {
81- _compareAndAdd (node.right, newNode);
80+ _compareAndAdd (node.right! , newNode);
8281 }
8382 }
8483 }
8584
86- BinaryNode <V > _delete (BinaryNode node, V value) {
85+ BinaryNode <V >? _delete (BinaryNode < V > ? node, V value) {
8786 // Base Case, Key not found
8887 if (node == null ) return node;
8988
90- if (node.value.compareTo (value) > 0 ) {
89+ if (node.value! .compareTo (value) > 0 ) {
9190 node.left = _delete (node.left, value);
92- } else if (node.value.compareTo (value) < 0 ) {
91+ } else if (node.value! .compareTo (value) < 0 ) {
9392 node.right = _delete (node.right, value);
9493 } else {
9594 // Node with value found.
@@ -98,11 +97,11 @@ class BinarySearchTree<V extends Comparable>
9897 if (node.left != null && node.right != null ) {
9998 // Successor to the node is the next inOrder node.
10099 var successor = node.right;
101- while (successor.left != null ) {
100+ while (successor! .left != null ) {
102101 successor = successor.left;
103102 }
104103 node.value = successor.value;
105- node.right = _delete (node.right, successor.value);
104+ node.right = _delete (node.right, successor.value! );
106105 } else {
107106 if (node.left != null ) {
108107 // Node only has left child.
0 commit comments