您当前的位置: 首页 > 

宝哥大数据

暂无认证

  • 0浏览

    0关注

    1029博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

层次遍历

宝哥大数据 发布时间:2019-11-01 17:05:37 ,浏览量:0

一、层次遍历 二、训练 2.1、637. 二叉树的层平均值
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def averageOfLevels(self, root: TreeNode) -> List[float]:
        if not root:
            return []
        
        ret = []
        que = [root]
        while que:
            queSize = len(que)
            cSum = 0
            for i in range(queSize):
                node = que.pop(0)
                cSum += node.val
                if node.left:
                    que.append(node.left)
                if node.right:
                    que.append(node.right)
                    
                
            ret.append(cSum/queSize)
        return ret
2.2、107. 二叉树的层次遍历 II
class Solution:
    def levelOrderBottom(self, root: TreeNode) -> List[List[int]]:
        que = []
        que.append(root)
        ret = []
        while len(que) > 0:
            queSize = len(que)
            subList = []
            for i in range(queSize):
                cur = que.pop(0)
                if cur:
                    subList.append(cur.val)
                    que.append(cur.left)
                    que.append(cur.right)
            
            if len(subList) > 0:
                ret.append(subList)
        ret.reverse()
        return ret
2.3、102. 二叉树的层次遍历
class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:
        if not root:
            return []
        que = [root]
        ret = [[root.val]]
        
        while que:
            queSize = len(que)
            curRet = []
            for i in range(queSize):
                node = que.pop(0)
                if node.left:
                    que.append(node.left)
                    curRet.append(node.left.val)
                if node.right:
                    que.append(node.right)
                    curRet.append(node.right.val)
            if curRet:
                ret.append(curRet)
        return ret
2.4、111. 二叉树的最小深度
class Solution:
    def minDepth(self, root: TreeNode) -> int:
        if not root:
            return 0
        que = []
        que.append(root)
        level = 0
        while len(que) > 0:
            queSize = len(que)
            for i in range(queSize):
                node = que.pop(0)
                if not node.left and not node.right:
                    return level + 1
                if node.left:
                    que.append(node.left)
                if node.right:
                    que.append(node.right)
            level += 1
        return level
2.5、429. N叉树的层序遍历
class Solution:
    def levelOrder(self, root: 'Node') -> List[List[int]]:
        if not root:
            return []
        ret = [[root.val]]
        que = [root]
        
        while que:
            queSize = len(que)
            curList = []
            for i in range(queSize):
                node = que.pop(0)
                for n in node.children:
                    if n:
                        curList.append(n.val)
                        que.append(n)
            if curList:
                ret.append(curList)
        return ret
2.6、993. 二叉树的堂兄弟节点
class Solution:
    def isCousins(self, root: TreeNode, x: int, y: int) -> bool:
        
        if not root:
            return False
        
        que = [root]

        while que:
            px = -1
            py = -1
            queSize = len(que)
            for i in range(queSize):
                node = que.pop(0)
                if node.left:
                    que.append(node.left)
                    if node.left.val == x :
                        px = node.val
                    if node.left.val == y:
                        py = node.val
                if node.right:
                    que.append(node.right)
                    if node.right.val == x :
                        px = node.val
                    if node.right.val == y:
                        py = node.val
            if px != -1 and py != -1 and px != py:
                return True
        return False
2.7、103. 二叉树的锯齿形层次遍历 相当于层次遍历,添加一个翻转标志
class Solution:
    def zigzagLevelOrder(self, root: TreeNode) -> List[List[int]]:
        if not root:
            return []
        que = [root]
        ret = [[root.val]]
        rflag = False 
        while que:
            queSize = len(que)
            curRet = []
            for i in range(queSize):
                node = que.pop(0)
                if node.left:
                    que.append(node.left)
                    curRet.append(node.left.val)
                if node.right:
                    que.append(node.right)
                    curRet.append(node.right.val)
            if curRet:
                if rflag:
                    ret.append(curRet)
                else:
                    ret.append(curRet[::-1])
                rflag = ~rflag
        return ret

关注
打赏
1587549273
查看更多评论
立即登录/注册

微信扫码登录

0.0404s