| 134 | } |
| 135 | |
| 136 | func levelOrderHelper[T constraints.Ordered](root, nilNode Node[T], traversal *[]T) { |
| 137 | var q []Node[T] // queue |
| 138 | var tmp Node[T] |
| 139 | |
| 140 | q = append(q, root) |
| 141 | |
| 142 | for len(q) != 0 { |
| 143 | tmp, q = q[0], q[1:] |
| 144 | *traversal = append(*traversal, tmp.Key()) |
| 145 | if tmp.Left() != nilNode { |
| 146 | q = append(q, tmp.Left()) |
| 147 | } |
| 148 | |
| 149 | if tmp.Right() != nilNode { |
| 150 | q = append(q, tmp.Right()) |
| 151 | } |
| 152 | } |
| 153 | } |
| 154 | |
| 155 | func predecessorHelper[T constraints.Ordered](node, nilNode Node[T]) (T, bool) { |
| 156 | if node.Left() != nilNode { |