104 二叉树的最大深度
class Solution:
def maxDepth(self, root: Optional[TreeNode]) -> int:
return self.getsubdeep(root,0)
def getsubdeep(self,root,n):
if not root:
return 0
l=self.getsubdeep(root.left,n)
r=self.getsubdeep(root.right,n)
if l>r:
return 1+l
else:
return 1+r
559 N 叉树的最大深度
class Solution:
def maxDepth(self, root: 'Node') -> int:
return self.sub(root)
def sub(self,root):
if not root:
return 0
ret=1
for i in range(len(root.children)):
r=root.children[i]
s= 1+self.sub(r)
if s>ret:
ret=s
return ret
111 二叉树的最小深度
class Solution:
def minDepth(self, root: Optional[TreeNode]) -> int:
return self.sub(root)
def sub(self,root):
if not root:
return 0
l=self.sub(root.left)
r=self.sub(root.right)
if r==0 and l==0:
return 1
elif r==0 and l>0 :
return l+1
elif l==0 and r>0:
return r+1
if l>r:
return r+1
else:
return l+1
222 完全二叉树的节点个数
class Solution:
def countNodes(self, root: Optional[TreeNode]) -> int:
if not root:
return 0
l=root.left
r=root.right
ld=0
rd=0
while l:
l=l.left
ld+=1
while r:
r=r.right
rd+=1
if ld==rd:
return (2<<ld)-1
else:
return self.countNodes(root.left)+self.countNodes(root.right)+1