1、根据给定的二叉树按照先序序列建立二叉树,写出先序扩展序列(#表示空指针); 2、实现二叉树的二叉链表存储表示; 3、先序遍历创建二叉树(递归算法); 4、实现求二叉树的深度递归算法; 5、实现统计二叉树叶子结点的递归算法。
时间: 2024-12-24 22:28:12 浏览: 8
二叉树先序和中序求后序
1. **先序序列构建二叉树**:
先序遍历的顺序是根节点 -> 左子树 -> 右子树,所以给定一个先序序列(包含根节点),可以这样构造二叉树:
- 遍历序列的第一个元素作为根节点。
- 从剩余序列中找到第一个非“#”的元素,它会是在左子树中对应的值。
- 使用该值作为当前根节点的左孩子的值,在左子树上递归地应用这个过程。
- 最后,如果序列还有剩余,那么右子树就是剩余部分。
2. **二叉树的二叉链表存储表示**:
在二叉链表表示中,每个节点有三个链接:left、right和parent(对于某些情况,可能不需要parent)。root节点的left链接指向第一个子节点,而其他节点的left链接指向其左孩子,right链接指向其右孩子。如果没有子节点,则相应链接为NULL。
3. **先序遍历创建二叉树(递归算法)**:
```python
def build_tree(preorder):
if not preorder:
return None
root = TreeNode(preorder[0])
root.left = build_tree(preorder[1:preorder.index('#')]) # 找到左子树的结束位置
root.right = build_tree(preorder[preorder.index('#')+1:]) # 去掉根节点后的部分
return root
```
4. **求二叉树深度的递归算法(Python)**:
```python
def depth(root):
if root is None:
return 0
else:
left_depth = depth(root.left)
right_depth = depth(root.right)
return max(left_depth, right_depth) + 1
```
5. **统计二叉树叶子结点的递归算法**:
```python
def count_leaves(node):
if node is None:
return 0
elif node.left is None and node.right is None:
return 1
else:
return count_leaves(node.left) + count_leaves(node.right)
```
在这个算法中,我们检查每个节点是否同时没有左右子节点,如果有,那就是一个叶子节点。
阅读全文