本人博客:
https://sleepymonster.cn/
二叉树最大深度:
from sys import exit
class TreeNode:
def __init__(self, val, left = None, right = None):
self.val = val
self.left = left
self.right = right
# 最大深度
def maxDepthA(self) -> int:
if not self:
return 0
if self.left:
left_depth = self.left.maxDepthA()
else:
left_depth = 0
if self.right:
right_depth = self.right.maxDepthA()
else:
right_depth = 0
return max(left_depth, right_depth) + 1
# BFS, 使用辅助队列。 每推进一层,深度加一。
def maxDepthB(self) -> int:
if not self:
return 0
queue = [self]
res = 0
while queue:
for _ in range(len(queue)):
p = queue.pop(0)
if p.left:
queue.append(p.left)
if p.right:
queue.append(p.right)
res += 1
return res
if __name__ == "__main__":
root = TreeNode(1)
n2 = TreeNode(2)
n3 = TreeNode(3)
n4 = TreeNode(4)
n5 = TreeNode(5)
root.left = n2
root.right = n3
n2.left = n4
n2.right = n5
print("maxDepthA = {0}".format(root.maxDepthA()))
print("maxDepthB = {0}".format(root.maxDepthB()))
exit(0)
判断是否相同的树:
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:
if p == None and q == None:
return True
elif p != None and q != None:
if p.val == q.val:
return self.isSameTree(p.left,q.left) and self.isSameTree(p.right,q.right)
return False
root1 = TreeNode(1)
n12 = TreeNode(2)
n13 = TreeNode(3)
n14 = TreeNode(4)
n15 = TreeNode(5)
root1.left=n12
root1.rigth=n13
n12.left=n14
n12.rigth=n15
root2 = TreeNode(1)
n22 = TreeNode(2)
n23 = TreeNode(3)
n24 = TreeNode(4)
n25 = TreeNode(5)
root2.left=n22
root2.rigth=n23
n23.left=n24
n23.rigth=n25
print(Solution().isSameTree(root1, root2))
最后一句:
不断学习