binary search treescmoreno/ece250/2012-02-08...2012/02/08 · binary search trees previously, on...
TRANSCRIPT
![Page 1: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/1.jpg)
Binary Search Trees
Carlos Moreno cmoreno @ uwaterloo.ca
EIT-4103
https://ece.uwaterloo.ca/~cmoreno/ece250
![Page 2: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/2.jpg)
Binary Search Trees
Standard reminder to set phones to silent/vibrate mode, please!
![Page 3: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/3.jpg)
Binary Search Trees
● Previously, on ECE-250 ... ● We discussed trees (the general type) and their
implementations.– We looked at traversals — pre-order and post order.‑
● We saw binary trees, a specific type of tree, and its implementation details.– Not the same implementation as for general trees!
● An important detail was that trees are used to store hierarchically ordered data.
![Page 4: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/4.jpg)
Binary Search Trees
● For today, we have a slight plot twist! ● We'll look at binary search trees and some related
concepts– In particular, we'll look at in-order traversal.
● We'll look at some of the operations on them and how to implement them.
![Page 5: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/5.jpg)
Binary Search Trees
● For today, we have a slight plot twist! ● We'll look at binary search trees and some related
concepts– In particular, we'll look at in-order traversal.
● We'll look at some of the operations on them and how to implement them.
● The plot twist being that these types of trees store linearly (totally) ordered data! So.... W'SUWT !!
![Page 6: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/6.jpg)
Binary Search Trees
● For a brief context/rationale, let's recall binary search:● If we have elements stored in ascending order in an
array, then we check the middle element:
![Page 7: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/7.jpg)
Binary Search Trees
● For a brief context/rationale, let's recall binary search:● If we have elements stored in ascending order in an
array, then we check the middle element:● Under the “standard” assumption that we write the
elements from left to right, we have that for each position:– Every element at the left of that position is less than the
one at that position.– Every element at the right of that position is greater than
the element at that position.
![Page 8: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/8.jpg)
Binary Search Trees
● For a brief context/rationale, let's recall binary search:● That's precisely what allows us to efficiently search
for values — check at the middle, and if the value we're searching is less than what we have there, then take the left chunk; greater than, we take the right chunk; and of course, if equal, then we're done.
![Page 9: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/9.jpg)
Binary Search Trees
● For a brief context/rationale, let's recall binary search:● Hmmm ... left ... right ... I wonder what that sounds
like .....
![Page 10: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/10.jpg)
Binary Search Trees
● Coming back to binary search in an array...● What if we're trying to keep a sequence of ordered
values? That is, what if we need to do insertions and removals?
![Page 11: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/11.jpg)
Binary Search Trees
● Coming back to binary search in an array...● What if we're trying to keep a sequence of ordered
values? That is, what if we need to do insertions and removals?– Searching would still be efficient (logarithmic time, since
binary search is feasible), but insertions and removals are very inefficient (linear time).
![Page 12: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/12.jpg)
Binary Search Trees
● Coming back to binary search in an array...● What if we're trying to keep a sequence of ordered
values? That is, what if we need to do insertions and removals?– Searching would still be efficient (logarithmic time, since
binary search is feasible), but insertions and removals are very inefficient (linear time).
● We won't even ask «what if we use a linked list?»– Been there, chosen NOT to do that — can't do binary
search in a linked list.
![Page 13: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/13.jpg)
Binary Search Trees
● So.... ● We tried arrays — no good● We tried linked lists — sorry, no good either
![Page 14: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/14.jpg)
Binary Search Trees
● So.... ● We tried arrays — no good● We tried linked lists — sorry, no good either
● The only two things we haven't tried (from the data structures we've seen) are hash tables and binary trees, right?● And since hash tables are by definition a container
for unordered data, well, good luck trying to maintain a sequence of ordered values using a hash table!
![Page 15: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/15.jpg)
Binary Search Trees
● So.... we try binary trees! (what a surprise!)● After all, we have left and right sub-trees — what if
we add the constraint that every value in the left sub-tree must be less than the value at the given node, and every value in the right sub-tree must be greater than the given node?– Let's say that we're making the implicit assumption of no
duplicate data (i.e., no two values are the same)
![Page 16: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/16.jpg)
Binary Search Trees
● Ok, question — can we enforce that constraint? (say, when inserting values?)
![Page 17: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/17.jpg)
Binary Search Trees
● Ok, question — can we enforce that constraint? (say, when inserting values?)● So, that's not too bad — if we think in terms of a
recursive function or method: if the value to be inserted is less than the value at the root, just pass the value to the left sub-tree to be inserted there, and if greater than, pass it to the right sub-tree.
● Obviously, the base case is reached at leaf nodes (in which case, a new node is created/allocated and we're done)
![Page 18: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/18.jpg)
Binary Search Trees
● But if we can enforce that constraint with insertions, then we're done — right? (why?)
![Page 19: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/19.jpg)
Binary Search Trees
● But if we can enforce that constraint with insertions, then we're done — right? (why?)● All we want to do is searches, insertions, and
removals– Searches don't affect the data (so clearly they can't break
the constraint)– And removals can not break the constraint (right?)
![Page 20: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/20.jpg)
Binary Search Trees
● Summarizing — this is essentially the definition of a binary search tree.
![Page 21: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/21.jpg)
Binary Search Trees
● Summarizing — this is essentially the definition of a binary search tree.
● Formally written: A (non-empty) binary search tree is a binary tree where:● The left sub-tree (if any) is a binary search tree and
all elements are less than the root element; and● The right sub-tree (if any) is a binary search tree
and all elements are greater than the root element.
![Page 22: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/22.jpg)
Binary Search Trees
● Normally, it would be a shocking surprise seeing that we want to store linearly ordered data in a tree... But I already spoiled that surprise, right? So, no plot twist at this point !
● The interesting aspect is that it's not the hierarchical nature what's of interest now, but the “geometry” and the properties that derive from the tree structure that are useful for this purpose!
![Page 23: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/23.jpg)
Binary Search Trees
● And yes, as soon as we store the values in a binary tree, we could accuse them of being hierarchical!● True enough — they follow the hierarchy imposed
by the storage in the tree. But this is an artificially imposed hierarchy — it's part of the storage structure, and not part of the data.
![Page 24: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/24.jpg)
Binary Search Trees
● Our visual idea of these binary search trees could be something like this:
![Page 25: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/25.jpg)
Binary Search Trees
● Our visual idea of these binary search trees could be something like this:
● Of course, each of the sub-trees must be binary search trees themselves!
![Page 26: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/26.jpg)
Binary Search Trees
● Other examples of binary search trees:
![Page 27: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/27.jpg)
Binary Search Trees
● So, let's rewind a little bit ...
![Page 28: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/28.jpg)
Binary Search Trees
● So, let's rewind a little bit ...
![Page 29: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/29.jpg)
Binary Search Trees
● So, let's rewind a little bit ...
![Page 30: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/30.jpg)
Binary Search Trees
● So, let's rewind a little bit ...
![Page 31: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/31.jpg)
Binary Search Trees
● So, let's rewind a little bit ...
![Page 32: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/32.jpg)
Binary Search Trees
● So, let's rewind a little bit ...
![Page 33: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/33.jpg)
Binary Search Trees
● So, let's rewind a little bit ... Ok, so we had to rewind a lot, all the way until our class back in 2012-01-18, discussing containers and relations...
![Page 34: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/34.jpg)
Binary Search Trees
● The point being — some of the operations that we may want to do on linearly ordered data (especially sorted data) could be:● Find the smallest and largest elements.● Iterate over all the elements, in order.● Find the next and previous elements to a given
value, which may or may not be in the container (we'll probably discuss this one next class).
![Page 35: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/35.jpg)
Binary Search Trees
● The point being — some of the operations that we may want to do on linearly ordered data (especially sorted data) could be:● Find the smallest and largest elements.● Iterate over all the elements, in order.● Find the next and previous elements to a given
value, which may or may not be in the container (we'll probably discuss this one next class).
● Can we do these in a binary search tree?
![Page 36: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/36.jpg)
Binary Search Trees
● Let's try the first one — find the smallest and largest elements in the tree (easy, right?)
![Page 37: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/37.jpg)
Binary Search Trees
● Let's try the first one — find the smallest and largest elements in the tree (easy, right?)
● Sure — for the smallest, just follow the left child, until we find the first empty left node; for the largest, same thing with the right child.
![Page 38: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/38.jpg)
Binary Search Trees
● Would that work for a tree that is completely unbalanced, and that has no left sub-tree right from the root node?
![Page 39: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/39.jpg)
Binary Search Trees
● What about for this one?
![Page 40: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/40.jpg)
Binary Search Trees
● Sure — in both cases, the search stops at the root (since we have the empty left node right there)
![Page 41: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/41.jpg)
Binary Search Trees
● Next — how do we iterate (for example, print) the elements in order?
![Page 42: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/42.jpg)
Binary Search Trees
● Next — how do we iterate (for example, print) the elements in order?● Notice that this involves visiting every element in
the tree — suggesting a tree traversal strategy...
![Page 43: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/43.jpg)
Binary Search Trees
● Next — how do we iterate (for example, print) the elements in order?● Notice that this involves visiting every element in
the tree — suggesting a tree traversal strategy...● So, which traversal strategy would work here?
![Page 44: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/44.jpg)
Binary Search Trees
● Next — how do we iterate (for example, print) the elements in order?● Notice that this involves visiting every element in
the tree — suggesting a tree traversal strategy...● So, which traversal strategy would work here?
– Breadth-first?
![Page 45: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/45.jpg)
Binary Search Trees
● Next — how do we iterate (for example, print) the elements in order?● Notice that this involves visiting every element in
the tree — suggesting a tree traversal strategy...● So, which traversal strategy would work here?
– Breadth-first? No way — right?
![Page 46: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/46.jpg)
Binary Search Trees
● Next — how do we iterate (for example, print) the elements in order?● Notice that this involves visiting every element in
the tree — suggesting a tree traversal strategy...● So, which traversal strategy would work here?
– Breadth-first? No way — right?– Depth-first — pre-order? post-order?
![Page 47: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/47.jpg)
Binary Search Trees
● We can see that neither pre- nor post-order work for this task! Simple counter-example:
Pre-order: 2 – 1 – 3
Post-order: 1 – 3 – 2
2
1
2
3
![Page 48: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/48.jpg)
Binary Search Trees
● So, the question is: why do we restrict ourselves to processing the current node either before every child or after every child?● We do visit each node three times — on our way
down, then when we come back from the left child, and a third time when we come back from the right.
![Page 49: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/49.jpg)
Binary Search Trees
● So, the question is: why do we restrict ourselves to processing the current node either before every child or after every child?● We do visit each node three times — on our way
down, then when we come back from the left child, and a third time when we come back from the right.
● Our additional traversal strategy, the so-called in order depth-first traversal‑ , results from processing the current node in between processing left sub-tree and right sub-tree!
![Page 50: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/50.jpg)
Binary Search Trees
● It is quite clear that this traversal visits the node in the order given by the values. An example:
(done on the board, solution not on the slides)
![Page 51: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/51.jpg)
Binary Search Trees
● Next — find the next and previous elements to a given value, which may or may not be in the container.
![Page 52: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/52.jpg)
Binary Search Trees
● Next — find the next and previous elements to a given value, which may or may not be in the container.● Let's start with an “easier” version of the above:
let's try to find a given value (or determine that it isn't in the container) — we'll leave the trickier one for next class.
![Page 53: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/53.jpg)
Binary Search Trees
● An example — let's find 50, 21, 45:
![Page 54: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/54.jpg)
Binary Search Trees
● An interesting detail — when searching, we're traversing a path (since we're always moving to one of the children); since the length of the longest path is the height h of the tree, then finding an element takes O(h).● And since h = lg n (where n is the number of
elements), then we're good
![Page 55: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/55.jpg)
Binary Search Trees
● An interesting detail — when searching, we're traversing a path (since we're always moving to one of the children); since the length of the longest path is the height h of the tree, then finding an element takes O(h).● And since h = lg n (where n is the number of
elements), then we're good — right?
![Page 56: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/56.jpg)
Binary Search Trees
● An interesting detail — when searching, we're traversing a path (since we're always moving to one of the children); since the length of the longest path is the height h of the tree, then finding an element takes O(h).● And since h = lg n (where n is the number of
elements), then we're good — right?● No, of course wrong! The nodes could be arranged
in linear sequence, so the height could be n.
![Page 57: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/57.jpg)
Binary Search Trees
● Still, we saw that for perfect and complete trees, the height is Θ(log n)
● We can't hope to get complete trees here (why?)
![Page 58: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/58.jpg)
Binary Search Trees
● Still, we saw that for perfect and complete trees, the height is Θ(log n)
● We can't hope to get complete trees here (why?), but maybe we'll be able to find things that are “close” to it, or in any case, that exhibit this same logarithmic behaviour for the height!
![Page 59: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/59.jpg)
Binary Search Trees
● Still, we saw that for perfect and complete trees, the height is Θ(log n)
● We can't hope to get complete trees here (why?), but maybe we'll be able to find things that are “close” to it, or in any case, that exhibit this same logarithmic behaviour for the height!● We'll see (not today) that the required attribute is
balance — if the tree is balanced, meaning that left and right sub-trees are guaranteed to be close (with respect to some measure such as number of nodes), then we're good!
![Page 60: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/60.jpg)
Binary Search Trees
● The remarkable detail is that there are indeed techniques (we'll look at one of them) that allow us to guarantee that a binary search tree is always balanced.● That's the real saver — if we couldn't guarantee
that, there would be no point in studying binary search trees (since we would have no guarantee of efficient — logarithmic time — operations)
![Page 61: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/61.jpg)
Binary Search Trees
● How about inserting elements?● Since this is really a sequential container (we're
storing linearly ordered data), we should have push_front and push_back — right?
![Page 62: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/62.jpg)
Binary Search Trees
● How about inserting elements?● Since this is really a sequential container (we're
storing linearly ordered data), we should have push_front and push_back — right?
● No, we notice that an element goes at its corresponding position — we don't decide that it goes at the beginning or at the end.
![Page 63: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/63.jpg)
Binary Search Trees
● How about inserting elements?● Since this is really a sequential container (we're
storing linearly ordered data), we should have push_front and push_back — right?
● No, we notice that an element goes at its corresponding position — we don't decide that it goes at the beginning or at the end.
● So, what really makes sense is a single insert operation that places the element at the correct position in the tree!
![Page 64: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/64.jpg)
Binary Search Trees
● Example: let's insert 20, 70, 30.
![Page 65: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/65.jpg)
Binary Search Trees
● Last (and definitely not least!), we'll look at removing elements.
● Unlike insertions, which are easy since we always go down to a leaf node and insert on one of its empty nodes, removals can happen anywhere!
![Page 66: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/66.jpg)
Binary Search Trees
● Last (and definitely not least!), we'll look at removing elements.
● Unlike insertions, which are easy since we always go down to a leaf node and insert on one of its empty nodes, removals can happen anywhere!
● We consider the three possible cases:● The node is a leaf node.● It has one child● It has two children
![Page 67: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/67.jpg)
Binary Search Trees
● In all three cases, we first have to locate the node (this part is easy — we just saw the searching procedure).
![Page 68: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/68.jpg)
Binary Search Trees
● If the node being removed is a leaf node, the operation is trivial — we just remove it (the operation is trouble-free)
![Page 69: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/69.jpg)
Binary Search Trees
● If the node being removed has one child, we run into a little bit of trouble — removing the node leaves a node (possibly an entire sub tree) floating ...‑
![Page 70: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/70.jpg)
Binary Search Trees
● If the node being removed has one child, we run into a little bit of trouble — removing the node leaves a node (possibly an entire sub tree) floating ...‑
● However, if it is the only child, then we can simply promote it — that is, move it up so that it takes the place of the removed element.
![Page 71: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/71.jpg)
Binary Search Trees
● Example — remove 39 in this tree
![Page 72: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/72.jpg)
Binary Search Trees
● Example — remove 39 in this tree
![Page 73: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/73.jpg)
Binary Search Trees
● Example — remove 39 in this tree
![Page 74: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/74.jpg)
Binary Search Trees
● So, we were saying that if the deleted element has only one child, we move that sub-tree up so that it takes the place of the removed element.● Why can't we do this if the deleted element has two
children?
![Page 75: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/75.jpg)
Binary Search Trees
● For example, try deleting 70
![Page 76: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/76.jpg)
Binary Search Trees
● The problem if it has two children is that if both children are full nodes, we have no room where to connect so many branches.
![Page 77: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/77.jpg)
Binary Search Trees
● So, it looks like if the node being removed has two children, then we run into a lot of trouble!● Any ideas? (for example, let's try removing 47)
![Page 78: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/78.jpg)
Binary Search Trees
● Thinking by analogy with sorted elements in an array, we would “shift” the remaining elements; so, one of the elements from the right is going to take the place of the deleted element after all... But which one?
![Page 79: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/79.jpg)
Binary Search Trees
● Thinking by analogy with sorted elements in an array, we would “shift” the remaining elements; so, either the lowest in the right sub-tree moves backward, or the highest in the left sub-tree moves forward● Since things are “linked”, the remaining elements
implicitly shift by one position.
![Page 80: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/80.jpg)
Binary Search Trees
● So, in the example of deleting the root, 47, we promote 51:
![Page 81: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/81.jpg)
Binary Search Trees
● So, in the example of deleting the root, 47, we promote 51:● As a consequence, we need to delete 51 from the
right sub-tree — not a problem, it has just one child!
![Page 82: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/82.jpg)
Binary Search Trees
● If we were to delete the root (now 51) again, we'd promote 52 — again, not a problem: that one is a leaf node.
![Page 83: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/83.jpg)
Binary Search Trees
● But if the node we have to promote is a full node (i.e., two children), then we'd have to loop, repeating the same process for that node's sub-tree
![Page 84: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/84.jpg)
Binary Search Trees
● But if the node we have to promote is a full node (i.e., two children), then we'd have to loop, repeating the same process for that node's sub-tree — right?
![Page 85: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/85.jpg)
Binary Search Trees
● No — of course wrong! The node we're promoting can not be a full node — it's the smallest value; if it was a full node, then there would be a smaller value at its left child!● So we're fine — the procedure works as described!
![Page 86: Binary Search Treescmoreno/ece250/2012-02-08...2012/02/08 · Binary Search Trees Previously, on ECE-250 ... We discussed trees (the general type) and their implementations. – We](https://reader035.vdocuments.net/reader035/viewer/2022062605/5fcd20bf848db4037631ef40/html5/thumbnails/86.jpg)
Summary
● During today's class, we discussed:● Binary search trees — definition and related
concepts.● Looked into in-order depth-first traversal.● Enjoyed the plot twist of using a tree for something
other than hierarchical data!● Looked into some of the operations on a binary
search tree● Next class (or rather, next week), we'll investigate
the issue of maintaining balance, so that the height is logarithmic w.r.t. the number of elements.