给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。 输入格式: 输入首先给出正整数N(≤50),为树中结点总数。下面两行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区别大小写)的字符串。 输出格式: 输出为一个整数,即该二叉树的高度。
时间: 2023-06-17 18:06:31 浏览: 82
这道题可以使用递归的方式求解。先通过先序遍历序列确定树的根节点,然后在中序遍历序列中找到根节点的位置,从而确定根节点的左右子树。接着递归地计算左右子树的高度,取左右子树高度的较大值加1即可得到整棵树的高度。
具体实现过程如下:
1. 定义一个函数 `getHeight(preorder, inorder)`,它的输入参数为先序遍历序列和中序遍历序列,返回该二叉树的高度。
2. 如果输入的先序遍历序列和中序遍历序列为空,则返回0。
3. 否则,取先序遍历序列的第一个元素作为根节点。在中序遍历序列中找到根节点的位置,从而确定根节点的左右子树。
4. 递归计算左子树和右子树的高度,取较大值加1即为整棵树的高度。
5. 返回整棵树的高度。
代码实现如下:
```python
def getHeight(preorder, inorder):
if not preorder or not inorder:
return 0
root = preorder[0]
root_idx = inorder.index(root)
left_inorder = inorder[:root_idx]
right_inorder = inorder[root_idx+1:]
left_preorder = preorder[1:1+len(left_inorder)]
right_preorder = preorder[1+len(left_inorder):]
left_height = getHeight(left_preorder, left_inorder)
right_height = getHeight(right_preorder, right_inorder)
return max(left_height, right_height) + 1
n = int(input())
preorder = input().strip()
inorder = input().strip()
print(getHeight(preorder, inorder))
```
时间复杂度为 $O(n^2)$,因为每次需要在中序遍历序列中查找根节点的位置,最坏情况下需要遍历整个中序遍历序列。可以通过使用哈希表来优化查找根节点位置的过程,时间复杂度可降低至 $O(n)$。