File tree 1 file changed +35
-6
lines changed
1 file changed +35
-6
lines changed Original file line number Diff line number Diff line change 9
9
* @param {TreeNode } root
10
10
* @return {number }
11
11
*/
12
- var countNodes = function ( root ) {
13
- function dfs ( node ) {
14
- if ( ! node ) {
15
- return 0 ;
12
+ var countNodes = function ( root ) {
13
+ function isExist ( level , k ) {
14
+ let bits = 1 << ( level - 1 ) ;
15
+ let node = root ;
16
+ while ( node && bits ) {
17
+ if ( k & bits ) {
18
+ node = node . right ;
19
+ } else {
20
+ node = node . left ;
21
+ }
22
+ bits = bits >> 1 ;
16
23
}
17
- return 1 + dfs ( node . left ) + dfs ( node . right ) ;
24
+ return node ;
18
25
}
19
- return dfs ( root ) ;
26
+
27
+ if ( ! root ) {
28
+ return 0 ;
29
+ }
30
+
31
+ let level = 0 ;
32
+ let node = root ;
33
+ while ( node . left ) {
34
+ level ++ ;
35
+ node = node . left ;
36
+ }
37
+
38
+ let l = 1 << level ;
39
+ let r = ( 1 << ( level + 1 ) ) - 1 ;
40
+ while ( l < r ) {
41
+ const mid = Math . ceil ( ( l + r ) / 2 ) ;
42
+ if ( isExist ( level , mid ) ) {
43
+ l = mid ;
44
+ } else {
45
+ r = mid - 1 ;
46
+ }
47
+ }
48
+ return l ;
20
49
} ;
You can’t perform that action at this time.
0 commit comments