222. 完全二叉树的节点个数
方法1: bfs 判断节点数量
=
class Solution:
def countNodes(self, root: TreeNode) -> int:
que = [root]
res = 0
while que:
node = que.pop(0)
if node:
res+=1
else :
return res
que.append(node.left)
que.append(node.right)
return 0
方法 2:
根据完全二叉树的性质 要么就是满二叉树 ,要么就是除了最后一层其他的都是满二叉树 对于任何一颗子树,左右子树高度相等即为满,
class Solution:
def countNodes(self, root: TreeNode) -> int:
if not root: return 0
left = root.left
right = root.right
deep_left , deep_right = 1 , 1
while left:
deep_left += 1
left = left.left
while right:
deep_right += 1
right = right.right
if deep_left == deep_right:
return 2**deep_left - 1
return 1 + self.countNodes(root.left) + self.countNodes(root.right)
1332. 删除回文子序列
因为没说连续回文 所以最多两次 ,先删a 后删 b
所以判断是否整个串是回文 否则返回2
class Solution:
def removePalindromeSub(self, s: str) -> int:
return 1 if s == s[::-1] else 2