设计一个程序来对二叉树进行操作,具体功能要求如下: 1.通过输入带虚结点(用#表示)的前序序列来生成一棵二叉树。 2.按前序序列顺序输出只有一个孩子的结点。 3.求解二叉树的镜像并输出(交换左右孩子)。 4.求解二叉树的高度并输出
时间: 2024-10-18 15:18:45 浏览: 47
数据结构作业:唯一确定一棵二叉树.doc
设计一个程序来处理二叉树的操作,首先需要明确数据结构和算法:
1. **构建二叉树**:从输入的前序遍历序列开始,可以使用递归方法。对于每个元素,如果遇到 '#', 表示虚拟节点,跳过;遇到非 '#' 的值,将其作为根节点创建一个新的二叉树,并将剩余的序列作为左子树和右子树的前序遍历继续处理。
```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):
if not preorder:
return None
root_val = preorder.pop(0)
if root_val == '#':
return None
root = TreeNode(root_val)
root.left = build_tree(preorder)
root.right = build_tree(preorder)
return root
```
2. **输出单子女节点**:可以在遍历过程中判断当前节点是否有两个孩子,只有一个则输出。
3. **求二叉树镜像**:修改二叉树的左右子节点即可,递归地对左、右子树进行镜像操作。
```python
def mirror_tree(node):
if node is not None:
node.left, node.right = node.right, node.left
mirror_tree(node.left)
mirror_tree(node.right)
```
4. **计算二叉树高度**:采用深度优先搜索或者广度优先搜索的策略,记录最大深度。
```python
def tree_height(node):
if node is None:
return 0
else:
left_height = tree_height(node.left)
right_height = tree_height(node.right)
return max(left_height, right_height) + 1
```
阅读全文