```python class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right def invertTree(root): # 如果当前节点为空,直接返回 if not root: return None # 交换左右子树 root.left, root.right = root.right, root.left # 递归翻转左右子树 invertTree(root.left) invertTree(root.right) return root def preorderTraversal(root): # 先序遍历函数 if not root: return [] result = [] stack = [root] while stack: node = stack.pop() result.append(node.val) if node.right: stack.append(node.right) if node.left: stack.append(node.left) return result def buildTree(data): # 构建二叉树 if not data: return None nodes = [None if val == -1 else TreeNode(int(val)) for val in data] kids = nodes[::-1] root = kids.pop() for node in nodes: if node: if kids: node.left = kids.pop() if kids: node.right = kids.pop() return root def solve(t, test_cases): results = [] for n, d, tree_data in test_cases: # 构建树 tree = buildTree(tree_data) # 翻转树 inverted_tree = invertTree(tree) # 获取先序遍历结果 pre_order = preorderTraversal(inverted_tree) results.append(' '.join(map(str, pre_order))) return results # 读取输入 import sys input = sys.stdin.read data = input().split() index = 0 t = int(data[index]) test_cases = [] for _ in range(t): n = int(data[index + 1]) d = int(data[index + 2]) index += 3 tree_data = [] for i in range(d): row = list(map(int, data[index:index + 2 i])) index += 2 i tree_data.extend(row) test_cases.append((n, d, tree_data)) results = solve(t, test_cases) for result in results: print(result) ``` 需要注意的逻辑点: 1. 边界条件:确保在构建树时处理好 `-1` 表示的空节点。 2. 递归深度:由于树的最大层数 `d` 可以达到 13,递归调用可能较深,确保递归不会导致栈溢出。 3. 输入解析:输入数据的解析需要准确无误,特别是多组测试数据的处理,确保每一组数据的解析正确。 [2024-12-02 09:50:35 | AI写代码神器 | 613点数解答]