试编写两个函数,返回一棵给定二叉树在中序遍历下的第一个结点和最后一个结点
时间: 2024-02-22 15:57:47 浏览: 97
给出先序遍历和中序遍历,求二叉树后序遍历
5星 · 资源好评率100%
好的,下面是两个函数的 Python 实现:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def first_last_node(root):
if not root:
return None, None
first = last = root
while first.left:
first = first.left
while last.right:
last = last.right
return first, last
def first_last_node_recursive(root):
def dfs(node):
nonlocal first, last
if not node:
return
dfs(node.left)
if not first:
first = node
last = node
dfs(node.right)
first = last = None
dfs(root)
return first, last
```
其中,`first_last_node` 是迭代实现,`first_last_node_recursive` 是递归实现。两个函数的时间复杂度均为 $O(n)$,其中 $n$ 是二叉树的结点数。
阅读全文