📅  最后修改于: 2023-12-03 15:08:05.335000             🧑  作者: Mango
二叉树是一种常见的数据结构,其中每个节点最多有两个子节点。在二叉树中查找两个节点之间的距离是一个常见的问题,例如查找两个节点之间的路径长度、找到两个节点之间的最近公共祖先等。在本文中,我们将介绍如何在给定的二叉树中查找两个节点之间的距离以进行Q查询。
二叉树是一种由节点和边组成的数据结构,其中每个节点最多有两个子节点。其中一个子节点被称为左子节点,另一个子节点被称为右子节点。在二叉树中,每个节点包含一个值并可以指向另一个节点。根节点是位于二叉树顶部的节点,并且没有父节点。二叉树可以用于许多应用程序中,例如查找,排序和遍历等。
在二叉树中查找两个节点之间的距离是一个常见的问题。要查找节点A和节点B之间的路径长度,请使用以下步骤:
在二叉树中查找两个节点之间的最近公共祖先是另一个常见的问题。要查找节点A和节点B之间的最近公共祖先,请使用以下步骤:
下面是一个简单的Python代码示例,用于查找给定二叉树中两个节点之间的距离。
class TreeNode:
def __init__(self, value=None, left=None, right=None):
self.value = value
self.left = left
self.right = right
def LCA(root, p, q):
if root is None:
return None
if root == p or root == q:
return root
left = LCA(root.left, p, q)
right = LCA(root.right, p, q)
if left is not None and right is not None:
return root
elif left is not None:
return left
elif right is not None:
return right
else:
return None
def distance(root, p, q):
lca = LCA(root, p, q)
def get_distance_to_node(node, target):
if node is None:
return -1
if node == target:
return 0
left = get_distance_to_node(node.left, target)
right = get_distance_to_node(node.right, target)
if left == -1 and right == -1:
return -1
elif left == -1:
return right + 1
else:
return left + 1
return get_distance_to_node(lca, p) + get_distance_to_node(lca, q)
# 示例用法
root = TreeNode(3, TreeNode(5, TreeNode(1), TreeNode(7)), TreeNode(1, TreeNode(9), TreeNode(0)))
print(distance(root, root.left, root.right)) # 2
代码说明:
上面的代码实现了一个二叉树节点,其中节点包含了从左到右的值、左子树和右子树。LCA
函数返回给定两个节点的最近公共祖先。第一个if语句用于检查当前节点是否为给定节点之一,如果是,则该节点是公共祖先。接下来,代码检查该节点的左子树和右子树中是否存在给定节点。如果两侧都有,则当前节点为最近公共祖先,否则,左右子树中只有一个存在给定节点,该子树上的节点可以视为最近公共祖先(只考虑走这个子树)。distance
函数检查两个节点之间的距离。它首先找到节点之间的最近公共祖先,然后计算每个节点到最近公共祖先的距离,在最后将两个距离相加来计算两个节点之间的距离。
在二叉树中查找两个节点之间的距离和最近公共祖先是经常需要完成的操作。本文提供了一个Python代码示例,用于演示如何查找这些信息。无论您的应用程序需要哪种操作,都应该使用上面的代码示例为基础。