如题:
求的就是二叉树的最大深度。
那对于二叉树或者B+树的处理,最主要的两种查询发放就是深度优先、广度优先。此处要求树的高度,第一个想到的是广度优先。如下算法1
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
# 广度优先遍历
class Solution:
def maxDepth(self, root: TreeNode) -> int:
if root:
line = [root]
else:
line = []
self.deep_level = 0
def bfs(line):
if line:
self.deep_level += 1
else:
return
new_line = []
for item in line:
if item.left:
new_line.append(item.left)
if item.right:
new_line.append(item.right)
bfs(new_line)
bfs(line)
return self.deep_level
if __name__ == '__main__':
root = TreeNode(3)
node1 = TreeNode(9)
node2 = TreeNode(20)
node3 = TreeNode(15)
node4 = TreeNode(7)
root.left = node1
root.right = node2
node2.left = node3
node2.right = node4
res = Solution().maxDepth(root)
print(res)
另外,后来看到一种解法,递归
效率上更高,个人认为这个递归类似于动态规划。
只不过动态规划方程类似这样:
dp = max(dp.left+1,dp.right+1)
而不是普通的动态规划方程
dp[i][j] = ...
这种结构
# 递归
class Solution:
def maxDepth(self, root: TreeNode) -> int:
if root:
return max(self.maxDepth(root.left)+1,self.maxDepth(root.right)+1)
else:
return 0