📅  最后修改于: 2023-12-03 15:39:56.464000             🧑  作者: Mango
问题 32:
一个二叉树的高度是根节点到最远叶节点的距离。给出一个算法来找出二叉树中的所有最长路径。
以下是给定的二叉树类:
class Node {
int data;
Node left;
Node right;
}
class BinaryTree {
Node root;
}
题目要求找出二叉树中的所有最长路径。参考了一下 leetcode上的解答,思路是递归遍历每一个节点,分别计算该节点左子树与右子树的深度和,最终选取左右子树深度和最大的节点作为二叉树的根节点,返回二叉树的深度和。
以下是具体的解答思路:
以下是Python的实现代码片段:
class Node:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
class BinaryTree:
def __init__(self, root):
self.root = Node(root)
self.paths = []
def diameter_of_binary_tree(self):
def find_max_path(node):
if not node:
return 0
left_depth = find_max_path(node.left)
right_depth = find_max_path(node.right)
self.paths.append(left_depth + right_depth)
return 1 + max(left_depth, right_depth)
find_max_path(self.root)
return max(self.paths)
# test case
if __name__ == "__main__":
binary_tree = BinaryTree(1)
binary_tree.root.left = Node(2)
binary_tree.root.right = Node(3)
binary_tree.root.left.left = Node(4)
binary_tree.root.left.right = Node(5)
assert binary_tree.diameter_of_binary_tree() == 3
该代码实现了二叉树求最长路径的功能,可以将代码片段集成到现有的软件系统中,以实现对二叉树的高效处理。