# 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