File tree Expand file tree Collapse file tree 1 file changed +27
-0
lines changed Expand file tree Collapse file tree 1 file changed +27
-0
lines changed Original file line number Diff line number Diff line change @@ -361,8 +361,13 @@ _back(node) {
361361breadthTraversal () {
362362 if (! this .root ) return null
363363 let q = new Queue ()
364+ // 将根节点入队
364365 q .enQueue (this .root )
366+ // 循环判断队列是否为空,为空
367+ // 代表树遍历完毕
365368 while (! q .isEmpty ()) {
369+ // 将队首出队,判断是否有左右子树
370+ // 有的话,就先左后右入队
366371 let n = q .deQueue ()
367372 console .log (n .value )
368373 if (n .left ) q .enQueue (n .left )
@@ -390,3 +395,25 @@ _getMax(node) {
390395}
391396```
392397
398+ ** 向上取整和向下取整** ,这两个操作是相反的,所以代码也是类似的,这里只介绍如何向下取整。既然是向下取整,那么根据二分搜索树的特性,值一定在根节点的左侧。只需要一直遍历左子树直到当前节点的值不再大于等于需要的值,然后判断节点是否还拥有右子树。如果有的话,继续上面的递归判断。
399+
400+ ``` js
401+ floor (v ) {
402+ if (! this .root ) return null
403+ let node = this ._floor (this .root , v)
404+ return node ? node .value : null
405+ }
406+ _floor (node , v ) {
407+ if (! node) return null
408+ if (node .value === v) return v
409+ // 如果当前节点值还比需要的值大,就继续递归
410+ if (node .value > v) {
411+ return this ._floor (node .left , v)
412+ }
413+ // 判断当前节点是否拥有右子树
414+ let right = this ._floor (node .right , v)
415+ if (right) return right
416+ return node
417+ }
418+ ```
419+
You can’t perform that action at this time.
0 commit comments