酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

题目描述 给出一颗二叉树,请把它左右翻转。超级简单吧,max howell竟然不会写,然后被google直接拒掉。(然后,然后...自己上网查吧) 比如下面的树这样翻转,然后输出翻转后先序遍历顺序。 4 / \ 2 6 / \ / \ 1 3 5 7 (转换前先序遍历顺序为 4 2 1 3 6 5 7) 4 / \ 6 2 / \ / \ 7 5 3 1 (转换后先序遍历顺序为 4 6 7 5 2 3 1) 输入 第一行一个整数t(<=10),表示有t组测试数据。 对于每组测试数据: 第一行两个整数n(<=8191)和d(1<=d<=13),表示这棵树有n个结点(结点标号为1~n),树有d层。 接下来d行: 第i行有2^(i-1)个整数,其中i行第j个a[i][j]的左儿子结点为a[i+1][j*2-1]右儿子为a[i+1][j*2](-1表示不存在该结点) 输出 对于每组数据输出一行为这颗树翻转后的先序遍历顺序。整数之间用空格隔开,最后一个整数后面没有空格。 样例输入 2 4 3 1

以下是使用 Python 实现的代码: ```python class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right def build_tree(nodes, d): root = TreeNode(nodes[0][0]) queue = [root] index = 1 for i in range(1, d): new_queue = [] for node in queue: if index < len(nodes[i]): left_val = nodes[i][index] if left_val!= -1: node.left = TreeNode(left_val) new_queue.append(node.left) index += 1 if index < len(nodes[i]): right_val = nodes[i][index] if right_val!= -1: node.right = TreeNode(right_val) new_queue.append(node.right) index += 1 queue = new_queue return root def reverse_tree(root): if root is None: return root.left, root.right = root.right, root.left reverse_tree(root.left) reverse_tree(root.right) def preorder_traversal(root): if root is not None: print(root.val, end=' ') preorder_traversal(root.left) preorder_traversal(root.right) t = int(input()) for _ in range(t): n, d = map(int, input().split()) nodes = [] for _ in range(d): nodes.append(list(map(int, input().split()))) root = build_tree(nodes, d) reverse_tree(root) preorder_traversal(root) print() ``` 需要注意的逻辑点: 1. 构建树的过程中,要正确处理节点不存在的情况。 2. 翻转树时,要确保左右子树完全交换。 3. 先序遍历输出时,注意控制最后的空格。 [2024-12-02 09:49:52 | AI写代码神器 | 452点数解答]

相关提问