Day16(10.5)

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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容