这是树的第24篇算法,力扣链接。
给你一棵 完全二叉树 的根节点
root
,求出该树的节点个数。完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第
h
层,则该层包含1~ 2h
个节点。示例 1:
输入:root = [1,2,3,4,5,6] 输出:6
用过层级遍历数过二叉树的节点数:
func countNodes(root *TreeNode) int {var result intif 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, 0left, right := root, rootfor 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)
}