编写二叉树的递归遍历算法,实现:给定一棵二叉树的“扩展先序遍历序列”,创建这棵二叉树。 (1)输出二叉树的先序遍历的结点序列。 (2)输出二叉树的后序遍历的结点序列。 (3)输出二叉树的中序遍历的结点序列。 (4)输出二叉树的叶子结点。 (5)统计二叉树的结点个数。
时间: 2024-12-31 19:10:02 浏览: 23
为了编写二叉树的递归遍历算法并创建树,我们可以按照给定的顺序——扩展先序遍历序列(根节点 -> 左子树 -> 右子树),逆向构造二叉树。然后分别计算先序、后序、中序遍历序列、叶子节点以及节点总数。
这里是一个简单的Python示例:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def build_tree(preorder, inorder):
if not preorder or not inorder:
return None
root_val = preorder[0]
root = TreeNode(root_val)
# 找到根节点在中序遍历中的位置
index = inorder.index(root_val)
# 分别构建左子树和右子树
root.left = build_tree(preorder[1:index], inorder[:index])
root.right = build_tree(preorder[index+1:], inorder[index+1:])
return root
# 定义遍历函数
def traverse(node, traversal_type="preorder"):
if node is None:
return []
result = []
if traversal_type == "preorder":
result.append(node.val)
result += traverse(node.left, traversal_type)
result += traverse(node.right, traversal_type)
elif traversal_type == "inorder":
result += traverse(node.left, traversal_type)
result.append(node.val)
result += traverse(node.right, traversal_type)
elif traversal_type == "postorder":
result += traverse(node.left, traversal_type)
result += traverse(node.right, traversal_type)
result.append(node.val)
else: # 中序遍历
result += traverse(node.left, traversal_type)
result.append(node.val)
result += traverse(node.right, traversal_type)
return result
# 示例:
preorder = [1, 2, 4, 7, 3, 6, 9] # 扩展先序遍历序列
inorder = [4, 7, 2, 1, 9, 6, 3]
root = build_tree(preorder, inorder)
print("先序遍历:", traverse(root))
print("后序遍历:", traverse(root, "postorder"))
print("中序遍历:", traverse(root, "inorder"))
leaf_nodes = [node for node in traverse(root) if node.left is None and node.right is None]
print("叶子节点:", leaf_nodes)
print("节点总数:", len(root)) # 或者遍历结果长度
```
上述代码首先通过扩展先序遍历序列构建了二叉树,然后实现了四种基本的遍历方法。最后,通过遍历得到叶子节点列表和节点总数。
阅读全文