【Python】二叉树最大深度&判断是否相同的树

本人博客:

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))

最后一句:

不断学习

猜你喜欢

转载自blog.csdn.net/weixin_51485807/article/details/115221759