0x00 题目

给你一棵 ​​完全二叉树​​​ 的根节点 ​​root​​​ 求出该树的 ​​节点个数​


0x01 思路

计算 ​​某个​​​ 节点的 ​​节点个数​​​:
计算 ​​​左​​​ 子树的 ​​节点个数​​​ 计算 ​​右​​ 子树的 ​​节点个数​​ 再加上 ​​当前​​ 节点个数 ​​1​​ 即可

左右子树的计算
又变成了 -> 计算 ​​​某个​​​ 节点的 ​​节点个数​​​ 这就变成了递归
结束条件是:​​节点为空​


0x02 解法

语言:​​Swift​

树节点:​​TreeNode​

public class TreeNode {
public var val: Int
public var left: TreeNode?
public var right: TreeNode?
public init() { self.val = 0; self.left = nil; self.right = nil; }
public init(_ val: Int) { self.val = val; self.left = nil; self.right = nil; }
public init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
self.val = val
self.left = left
self.right = right
}
}

解法:

func countNodes(_ root: TreeNode?) -> Int {
// 结束条件
guard let r = root else { return 0 }

// 左 子树的 节点个数
let left = countNodes(r.left)
// 右 子树的 节点个数
let right = countNodes(r.right)
// 当前节点树的 节点个数
return left + right + 1
}