🚀 本题 LeetCode 传送门

    题目大意

    输出一颗完全二叉树的结点个数。

    解题思路

    这道题其实按照层序遍历一次树,然后把每一层的结点个数相加即可。

    代码

    1. package leetcode
    2. /**
    3. * Definition for a binary tree node.
    4. * type TreeNode struct {
    5. * Val int
    6. * Left *TreeNode
    7. * Right *TreeNode
    8. * }
    9. */
    10. func countNodes(root *TreeNode) int {
    11. if root == nil {
    12. return 0
    13. }
    14. queue := []*TreeNode{}
    15. queue = append(queue, root)
    16. curNum, nextLevelNum, res := 1, 0, 1
    17. for len(queue) != 0 {
    18. if curNum > 0 {
    19. node := queue[0]
    20. if node.Left != nil {
    21. queue = append(queue, node.Left)
    22. nextLevelNum++
    23. }
    24. if node.Right != nil {
    25. queue = append(queue, node.Right)
    26. nextLevelNum++
    27. }
    28. curNum--
    29. queue = queue[1:]
    30. }
    31. if curNum == 0 {
    32. res += nextLevelNum
    33. curNum = nextLevelNum
    34. nextLevelNum = 0
    35. }
    36. }
    37. return res
    38. }