在Python中查找二叉树中两个节点之间距离的程序
假设我们有一棵二叉树并被要求查找二叉树中两个节点之间的距离。我们像在图中一样找到两个节点之间的边,并返回边数或它们之间的距离。树的一个节点具有以下结构 −
因此,如果输入是
我们需要查找的两个节点为2和8,那么输出为4。
两个节点2和8之间的边为:(2,3),(3,5),(5,7)和(7,8)。它们之间的路径上有4个边,因此距离为4。
要解决这个问题,我们将遵循以下步骤−
- 定义findLca()函数。这将使用root,p和q
- 如果root与null相同,则
- 返回null
- 如果root的数据是(p,q)中的任何一个,则
- 返回root
- left := findLca(root的左子树,p,q)
- right := findLca(root的右子树,p,q)
- 如果left和right不为null,则
- 返回root
- 返回left或right
- 如果root与null相同,则
- 定义findDist()函数。这将使用root和数据
- queue :=一个新的deque
- 在队列末尾插入一个新的二元组(root, 0)
- 当队列不为空时,执行以下操作:
- current :=队列中左侧二元组的第一个值
- dist:队列中左侧二元组的第二个值
- 如果current的数据与输入数据相同,则
- 返回dist
- 如果current的左子节点不为null,则
- 将二元组(当前节点的左子节点,dist+1)添加到队列中
- 如果current的右子节点不为null,则
- 将二元组(current.right,dist+1)添加到队列中
- node := findLca(root,p,q)
- 返回findDist(node,p) + findDist(node,q)
示例
让我们看看以下实现以更好地理解−