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) {
361
361
breadthTraversal () {
362
362
if (! this .root ) return null
363
363
let q = new Queue ()
364
+ // 将根节点入队
364
365
q .enQueue (this .root )
366
+ // 循环判断队列是否为空,为空
367
+ // 代表树遍历完毕
365
368
while (! q .isEmpty ()) {
369
+ // 将队首出队,判断是否有左右子树
370
+ // 有的话,就先左后右入队
366
371
let n = q .deQueue ()
367
372
console .log (n .value )
368
373
if (n .left ) q .enQueue (n .left )
@@ -390,3 +395,25 @@ _getMax(node) {
390
395
}
391
396
```
392
397
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