BFS-104-559-剑指offer 32-II-剑指offer 32-I -933-101-1379-面试04.03-513-116

在这里插入图片描述

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def maxDepth(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        if root is None:
            return 0
        queue=[]
        queue.append(root)
        depth=0
        while len(queue)!=0:
            size=len(queue)
            while size>=1:
                cur_head=queue.pop(0)
                if cur_head.left:
                    queue.append(cur_head.left)
                if cur_head.right:
                    queue.append(cur_head.right)
                size-=1
            depth+=1
        return depth

在这里插入图片描述

"""
# Definition for a Node.
class Node(object):
    def __init__(self, val=None, children=None):
        self.val = val
        self.children = children
"""

class Solution(object):
    def maxDepth(self, root):
        """
        :type root: Node
        :rtype: int
        """
        if root is None:
            return 0
        queue=[]
        queue.append(root)

        depth=0
        while len(queue)!=0:
            size=len(queue)
            while size>=1:
                cur_head=queue.pop(0)
                for c in cur_head.children:
                    queue.append(c)
                size-=1
            depth+=1
        return depth


同二叉树基本一致,但要注意,多叉树children是列表

在这里插入图片描述

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def levelOrder(self, root):
        """
        :type root: TreeNode
        :rtype: List[List[int]]
        """
        if root is None:
            return []
        res=[]
        queue=[]
        queue.append(root)
        while len(queue)!=0:
            size=len(queue)
            cur_res=[]
            while size>=1:
                cur_head=queue.pop(0)
                cur_res.append(cur_head.val)
                if cur_head.left:
                    queue.append(cur_head.left)
                if cur_head.right:
                    queue.append(cur_head.right)
                size-=1
            res.append(cur_res)
        return res

在这里插入图片描述

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def levelOrder(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        if root is None:
            return []
        queue=[]
        queue.append(root)
        res=[]
        while len(queue)!=0:
            cur_head=queue.pop(0)
            res.append(cur_head.val)
            if cur_head.left:
                queue.append(cur_head.left)
            if cur_head.right:
                queue.append(cur_head.right)
        return res

在这里插入图片描述

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def isCousins(self, root, x, y):
        """
        :type root: TreeNode
        :type x: int
        :type y: int
        :rtype: bool
        """
        if root is None:
            return False
        queue=[]
        queue.append(root)
        while len(queue)!=0:
            size=len(queue)
            fx=False
            fy=False
            while size>=1:
                cur_head=queue.pop(0)
                if cur_head.val==x:
                    fx=True
                if cur_head.val==y:
                    fy=True
                if cur_head.left:
                    queue.append(cur_head.left)
                if cur_head.right:
                    queue.append(cur_head.right)
                size-=1
            if fx and fy:
                return True
        return False

代码暂时不通,还需要加一个条件判断这两个值是否为同一个父节点才行

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def isCousins(self, root, x, y):
        """
        :type root: TreeNode
        :type x: int
        :type y: int
        :rtype: bool
        """
        if root is None:
            return False
        queue=[]
        queue.append(root)
        par=[None]
        while len(queue)!=0:
            size=len(queue)
            fx=False
            fy=False
            while size>=1:
                cur_head=queue.pop(0)
                cur_par=par.pop(0)
                if cur_head.val==x:
                    fx=True
                    fxp=cur_par
                if cur_head.val==y:
                    fy=True
                    fyp=cur_par
                if cur_head.left:
                    queue.append(cur_head.left)
                    par.append(cur_head)
                if cur_head.right:
                    queue.append(cur_head.right)
                    par.append(cur_head)
                size-=1
            if (fx and fy) and fxp!=fyp:
                return True
        return False

改进版,定义了同一个父节点的条件

在这里插入图片描述

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def isSymmetric(self, root):
        """
        :type root: TreeNode
        :rtype: bool
        """
        if root is None:
            return False
        queue=[]
        queue.append(root)
        while len(queue)!=0:
            res=[]
            size=len(queue)
            while size>=1:
                cur_head=queue.pop(0)
                if cur_head:
                    res.append(cur_head.val)
                    queue.append(cur_head.left)
                    queue.append(cur_head.right)
                else:
                    res.append(None)
                size-=1
            if len(res)>=2:
                for i in range(len(res)):
                    if res[i]!=res[len(res)-1-i]:
                        return False
        return True

不管左右子树是否存在,都将其放入队列中

在这里插入图片描述

class Solution(object):
    def minDepth(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        if root is None:
            return 0
        
        queue=[]
        queue.append(root)
        depth=0
        while len(queue)!=0:
            size=len(queue)
            while size>=1:
                cur_head=queue.pop(0)
                if cur_head.left is None and cur_head.right is None:
                    return depth+1
                if cur_head.left:
                    queue.append(cur_head.left)
                if cur_head.right:
                    queue.append(cur_head.right)
                size-=1
            depth+=1


碰到的第一个左右子树都不存在的节点时,该节点的深度就是最小深度


在这里插入图片描述

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def getTargetCopy(self, original, cloned, target):
        """
        :type original: TreeNode
        :type cloned: TreeNode
        :type target: TreeNode
        :rtype: TreeNode
        """
        if original.val==target:
            return cloned
        
        queue1=[original]
        queue2=[cloned]
        
        while len(queue1)!=0:
            cur_org=queue1.pop(0)
            cur_clo=queue2.pop(0)
            
            if cur_org==target:
                return cur_clo
            if cur_org.left:
                queue1.append(cur_org.left)
                queue2.append(cur_clo.left)
            if cur_org.right:
                queue1.append(cur_org.right)
                queue2.append(cur_clo.right)

target是一个节点,而不是一个数值

在这里插入图片描述

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def listOfDepth(self, tree):
        """
        :type tree: TreeNode
        :rtype: List[ListNode]
        """
        if tree is None:
            return []
        queue=[tree]
        res=[]
        while len(queue)!=0:
            size=len(queue)
            head_node=ListNode(0)
            cur_node=head_node
            while size>=1:
                cur_head=queue.pop(0)
                cur_node.next=ListNode(cur_head.val)
                cur_node=cur_node.next
                if cur_head.left:
                    queue.append(cur_head.left)
                if cur_head.right:
                    queue.append(cur_head.right)
                size-=1
            res.append(head_node.next)
        return res

在这里插入图片描述

# Definition for a
# binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def findBottomLeftValue(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        if root is None:
            return
        queue=[]
        queue.append(root)
        res=[]
        while len(queue)!=0:
            size=len(queue)
            cur_res=[]
            while size>=1:
                cur_head=queue.pop(0)
                cur_res.append(cur_head.val)
                if cur_head.left:
                    queue.append(cur_head.left)
                if cur_head.right:
                    queue.append(cur_head.right)
                size-=1
            res.append(cur_res)
        return res[-1][0] 

在这里插入图片描述

"""
# Definition for a Node.
class Node(object):
    def __init__(self, val=0, left=None, right=None, next=None):
        self.val = val
        self.left = left
        self.right = right
        self.next = next
"""

class Solution(object):
    def connect(self, root):
        """
        :type root: Node
        :rtype: Node
        """
        if root is None:
            return None
        queue=[]
        queue.append(root)
        
        while len(queue)!=0:
            size=len(queue)
            while size>=1:
                cur_head=queue.pop(0)
                if cur_head.left:
                    queue.append(cur_head.left)
                if cur_head.right:
                    queue.append(cur_head.right)
                if size!=1:
                    cur_head.next=queue[0]
                size-=1
        return root

同一个深度中,最后一个节点的next为NULL,否则横向指,其指向就在队列中的第一个节点


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值