这是树的第24篇算法,力扣链接。
给你一棵 完全二叉树 的根节点
root
,求出该树的节点个数。完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第
h
层,则该层包含1~ 2h
个节点。示例 1:
输入:root = [1,2,3,4,5,6] 输出:6
用过层级遍历数过二叉树的节点数:
func countNodes(root *TreeNode) int {
var result int
if root == nil {
return result
}
stack := []*TreeNode{root}
for len(stack) > 0 {
node := stack[len(stack)-1]
stack = stack[:len(stack)-1]
result++
if node.Right != nil {
stack = append(stack, node.Right)
}
if node.Left != nil {
stack = append(stack, node.Left)
}
}
return result
}
还有利用完美二叉树的做法,先判断是否是满节点,如果满的话直接计算,不满的话递归去做。
func countNodes(root *TreeNode) int {
if root == nil {
return 0
}
leftCount, rightCount := 0, 0
left, right := root, root
for left != nil {
leftCount++
left = left.Left
}
for right != nil {
rightCount++
right = right.Right
}
if leftCount == rightCount {
return 1<<leftCount - 1
}
return 1 + countNodes(root.Left) + countNodes(root.Right)
}