File tree Expand file tree Collapse file tree 2 files changed +47
-0
lines changed Expand file tree Collapse file tree 2 files changed +47
-0
lines changed Original file line number Diff line number Diff line change @@ -335,6 +335,30 @@ func countNodes(root *TreeNode) int {
335
335
}
336
336
```
337
337
338
+ 利用完全二叉树特性的递归解法
339
+ ``` go
340
+ func countNodes (root *TreeNode ) int {
341
+ if root == nil {
342
+ return 0
343
+ }
344
+ leftH , rightH := 0 , 0
345
+ leftNode := root.Left
346
+ rightNode := root.Right
347
+ for leftNode != nil {
348
+ leftNode = leftNode.Left
349
+ leftH++
350
+ }
351
+ for rightNode != nil {
352
+ rightNode = rightNode.Right
353
+ rightH++
354
+ }
355
+ if leftH == rightH {
356
+ return (2 << leftH) - 1
357
+ }
358
+ return countNodes (root.Left ) + countNodes (root.Right ) + 1
359
+ }
360
+ ```
361
+
338
362
339
363
340
364
JavaScript:
Original file line number Diff line number Diff line change @@ -350,6 +350,29 @@ class Solution:
350
350
351
351
```
352
352
Go:
353
+
354
+ ``` go
355
+ func binaryTreePaths (root *TreeNode ) []string {
356
+ res := make ([]string , 0 )
357
+ var travel func (node *TreeNode, s string )
358
+ travel = func (node *TreeNode, s string ) {
359
+ if node.Left == nil && node.Right == nil {
360
+ v := s + strconv.Itoa (node.Val )
361
+ res = append (res, v)
362
+ return
363
+ }
364
+ s = s + strconv.Itoa (node.Val ) + " ->"
365
+ if node.Left != nil {
366
+ travel (node.Left , s)
367
+ }
368
+ if node.Right != nil {
369
+ travel (node.Right , s)
370
+ }
371
+ }
372
+ travel (root, " " )
373
+ return res
374
+ }
375
+ ```
353
376
354
377
JavaScript:
355
378
1.递归版本
You can’t perform that action at this time.
0 commit comments