Skip to content

Commit ab002e7

Browse files
Merge pull request #420 from betNevS/master
增加 0222.完全二叉树的节点个数 go版 (新增利用完全二叉树特性的递归解法)
2 parents 0135feb + a85e410 commit ab002e7

File tree

2 files changed

+47
-0
lines changed

2 files changed

+47
-0
lines changed

problems/0222.完全二叉树的节点个数.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -335,6 +335,30 @@ func countNodes(root *TreeNode) int {
335335
}
336336
```
337337

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+
338362

339363

340364
JavaScript:

problems/0257.二叉树的所有路径.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,29 @@ class Solution:
350350

351351
```
352352
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+
```
353376

354377
JavaScript:
355378
1.递归版本

0 commit comments

Comments
 (0)