222.完全二叉树的节点个数
题目描述: 222.完全二叉树的节点个数.
解法
递归
class Solution(object):
def countNodes(self, root):
if not root:
return 0
return self.countNodes(root.left) + self.countNodes(root.right) + 1
迭代
class Solution(object):
def countNodes(self, root):
st = []
nums = 0
if root:
st.append(root)
while st:
node = st.pop()
nums += 1
if node.left:
st.append(node.left)
if node.right:
st.append(node.right)
return nums
完全二叉树
class Solution(object):
def countNodes(self, root):
if not root:
return 0
left = root.left
right = root.right
count = 0
while left and right:
left = left.left
right = right.right
count += 1
if not right and not left:
return 2 ** (count+1) - 1
return self.countNodes(root.left) + self.countNodes(root.right) + 1
完全二叉树的特性就是一定会由多个满二叉树构成,那么如何判断是不是满二叉树呢,左节点一直向左延申,右节点一直向右延申,左右深度一样,就是一个满二叉树