返回
编码世界的探索之旅:算法[89]题解之二叉树直径
前端
2023-12-04 06:11:40
你是否想在算法的世界里探险,挑战自己的思维极限?算法题解系列将带你踏上精彩的旅程,而二叉树直径正是我们即将面对的挑战之一。在这篇文章中,我们将通过递归算法来解决LeetCode题库中的第162题,让你领略算法的魅力和思维的力量。
LeetCode 162:二叉树的直径
题目
给定一棵二叉树,你的任务是找到该树中两个节点之间的最长路径长度。
示例:
1
/ \
2 3
/ \
4 5
这棵二叉树的直径是4,即从节点2到节点5的最长路径。
解法:
我们可以使用递归算法来解决这个问题。对于每个节点,我们可以计算出其左子树和右子树的高度,然后加上自身的高度得到该节点的最大直径。
def diameterOfBinaryTree(root):
if not root:
return 0
leftHeight = height(root.left)
rightHeight = height(root.right)
leftDiameter = diameterOfBinaryTree(root.left)
rightDiameter = diameterOfBinaryTree(root.right)
return max(leftHeight + rightHeight + 1, leftDiameter, rightDiameter)
def height(root):
if not root:
return 0
return max(height(root.left), height(root.right)) + 1
时间复杂度:
递归算法的时间复杂度为O(n),其中n为二叉树的节点数。这是因为我们遍历了二叉树的所有节点,并且对于每个节点,我们计算其左子树和右子树的高度。
空间复杂度:
递归算法的空间复杂度为O(h),其中h为二叉树的高度。这是因为递归算法在调用栈中存储了每个节点的高度。
示例代码:
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
print(diameterOfBinaryTree(root)) # 输出:4
总结:
算法题解系列带你走近算法的世界,通过一道道经典算法题的讲解,让你领略算法的魅力和思维的力量。二叉树直径只是其中一道题目,还有更多精彩的题目等待着你的挑战。让我们一起踏上算法探索之旅,在代码的世界里探险,不断突破自己的思维极限,成为算法高手!