二叉树左右翻转难题破解:含代码实现与输入处理要点
```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. 输入解析:输入数据的解析需要准确无误,特别是多组测试数据的处理,确保每一组数据的解析正确。 ######[AI写代码神器 | 613点数解答 | 2024-12-02 09:50:35]
- C语言实现整数“第二数位”翻转:代码详解与复杂度分析(字节豆包 | 523点数解答 | 2025-11-10 19:54:57)99
- C++实现整数“第二数位”翻转:代码详解与复杂度分析(字节豆包 | 462点数解答 | 2025-11-10 20:30:20)116
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)380
- 工程师必知:软件系统用户文档编写九大要点揭秘(百度文心 | 350点数解答 | 2023-11-09 18:23:53)216
- CentOS下Java进程出现futex_wait_queue_me问题的处理全流程(阿里通义 | 283点数解答 | 2023-11-20 14:51:26)487
- 替雷利珠单抗致免疫相关性糖尿病:病例报道与机制探讨,为临床用药敲响警钟( | 164点数解答 | 2024-10-11 14:52:52)289
- Python 代码转 C++:计算花朵鲜艳值总和(字节豆包 | 408点数解答 | 2026-04-19 21:50:57)19
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)350
- 用 JS 中 for 循环实现 1 到 100 相加并输出结果到页面的完整代码 ( | 240点数解答 | 2024-05-20 22:11:29)497
- 用 JS 的 while 循环实现 1 到 100 相加并输出到页面的代码揭秘( | 47点数解答 | 2024-05-20 22:16:48)386
- C++实现九九乘法表输出及代码详细解释(字节豆包 | 412点数解答 | 2026-02-06 22:10:32)85
- 使用 C++ 统计可晋升为食人魔战士的数量(字节豆包 | 300点数解答 | 2026-04-10 19:22:07)20