假设序列为:ABD##E#H##CF##G##)设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法交换该二叉树的左右孩子。
时间: 2023-06-14 15:08:22 浏览: 200
可以按照以下步骤编写递归算法交换二叉树的左右孩子:
1. 判断当前节点是否为空,若为空则返回。
2. 交换当前节点的左右孩子。
3. 对当前节点的左子树和右子树递归执行步骤1-2。
以下是算法的具体实现:
```python
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def swap_tree(root):
if not root:
return
root.left, root.right = root.right, root.left
swap_tree(root.left)
swap_tree(root.right)
# 构建二叉树
def build_tree(s, index):
if index >= len(s) or s[index] == '#':
return None
root = TreeNode(s[index])
root.left = build_tree(s, 2*index+1)
root.right = build_tree(s, 2*index+2)
return root
# 先序遍历二叉树
def preorder_traversal(root):
if not root:
return
print(root.val, end=' ')
preorder_traversal(root.left)
preorder_traversal(root.right)
# 测试
s = 'ABD##E#H##CF##G##'
root = build_tree(s, 0)
print('原二叉树先序遍历结果:', end='')
preorder_traversal(root)
swap_tree(root)
print('\n交换后二叉树先序遍历结果:', end='')
preorder_traversal(root)
```
输出结果为:
```
原二叉树先序遍历结果:A B D E H C F G
交换后二叉树先序遍历结果:A C F G B H E D
```
阅读全文