二叉树游戏牛客
时间: 2025-05-18 14:08:23 浏览: 32
### 关于二叉树的游戏与练习题
#### 构造二叉树
通过给定的先序遍历 `preorder` 和中序遍历 `inorder` 来构建一棵二叉树是一个经典的算法问题[^1]。此问题的核心在于利用先序遍历的第一个元素作为根节点,并从中序遍历中找到该根节点的位置,从而划分左子树和右子树。
以下是基于 Python 的解决方案:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def buildTree(preorder, inorder):
if not preorder or not inorder:
return None
root_val = preorder[0]
root_index_in_inorder = inorder.index(root_val)
root = TreeNode(root_val)
root.left = buildTree(preorder[1:root_index_in_inorder + 1], inorder[:root_index_in_inorder])
root.right = buildTree(preorder[root_index_in_inorder + 1:], inorder[root_index_in_inorder + 1:])
return root
```
#### 层序遍历与后续遍历
对于上述构造好的二叉树,可以进一步计算其层序遍历和后续遍历的结果[^2]。需要注意的是,在实际编程环境中(如 C++),由于内存分配的原因可能导致数组越界的错误,因此需要合理规划数据结构的空间大小。
以下是层序遍历的一个简单实现:
```python
from collections import deque
def levelOrder(root):
result = []
queue = deque([root])
while queue:
node = queue.popleft()
if node:
result.append(node.val)
queue.append(node.left)
queue.append(node.right)
return result
```
#### 子树翻转操作
另一个常见的问题是关于二叉树的镜像翻转。可以通过递归的方式从叶子节点向上逐级反转左右子树来完成整个过程[^3]。
下面是执行这一功能的方法示例:
```python
def invertTree(root):
if root is None:
return None
temp = root.left
root.left = invertTree(root.right)
root.right = invertTree(temp)
return root
```
###
阅读全文
相关推荐




















