二叉树查找中序遍历前驱结点
时间: 2023-12-23 22:26:37 浏览: 90
求二叉树前序遍历序列中第k个结点的值
5星 · 资源好评率100%
根据二叉树中序遍历的性质,一个节点的前驱结点是其左子树中最右侧的节点。因此,我们可以按照以下步骤查找一个节点的前驱结点:
1. 如果该节点有左子树,则前驱结点为其左子树中最右侧的节点,即左子树中最大的节点。
2. 如果该节点没有左子树,则需要向上查找其祖先节点,直到找到一个节点是其父节点的右子节点,那么该节点的父节点就是该节点的前驱结点。
下面是一个递归实现的示例代码:
```python
def predecessor(root, p):
if not root:
return None
# 如果 p 有左子树,则前驱结点为其左子树中最右侧的节点
if p.left:
node = p.left
while node.right:
node = node.right
return node
# 如果 p 没有左子树,则需要向上查找其祖先节点
# 直到找到一个节点是其父节点的右子节点,那么该节点的父节点就是该节点的前驱结点
pre = None
while root != p:
if p.val < root.val:
root = root.left
else:
pre = root
root = root.right
return pre
```
阅读全文