求二叉树的叶节点pta
时间: 2024-11-12 16:16:51 浏览: 39
求解二叉树的叶节点问题通常涉及到遍历二叉树的过程。在计算机科学中,叶节点(也称终端节点或叶子节点)是没有孩子的节点,即它们要么没有左子节点,要么没有右子节点。
这里有几种常见的方法来找到二叉树的叶节点:
1. **递归**:从根节点开始,如果当前节点为空,返回空;如果当前节点是非叶节点,那么左右子树都不是叶节点;如果是叶节点,则将当前节点添加到结果列表中,并继续对下一个节点递归。递归终止条件通常是遇到空节点。
2. **迭代**:可以使用栈数据结构来模拟递归过程。首先将根节点入栈,然后循环中弹出节点并检查是否是叶节点。如果是,就记录下来;然后将其非空子节点(如果有)入栈。当栈为空时结束,所有叶节点都被找到。
3. ** Morris 遍历**:这是一种巧妙的空间复杂度为 O(1) 的方法,通过修改二叉树的结构来避免额外的存储空间。它不会真正创建一个临时堆栈,而是利用线索链(或称为“懒惰”链接)指向兄弟节点,只在需要的时候创建路径。
对于实际编程操作,这里给出一个简单的 Python 示例,使用递归方法:
```python
def is_leaf(node):
return node.left is None and node.right is None
def leaf_nodes(root):
if root is None:
return []
return [node for node in [root] + leaf_nodes(root.left) + leaf_nodes(root.right) if is_leaf(node)]
```
阅读全文