Description
给定一个二叉查找树,要求计算其高度,每个二叉查找树将给出先序与中序的遍历。
例如:一个二叉查找树其先序遍历为:16, 10, 4, 15, 23 ; 中序遍历为 4, 10, 15, 16, 23,则其高度为2(假定空树高度为-1,只有根节点的数高度为0)
Input
第一行输入测试用例个数。
对于每个测试用例,
第一行是节点个数n,第二行是key值的先序遍历,第三行是key值的中序遍历
Output
对于每个测试用例,用一行输出树的高度
Sample Input
2
3
4 5 6
4 5 6
5
6 4 8 9 10
4 6 8 9 10
Sample Output
2
3
解题思路
首先,根据二叉树的遍历特性
- 先序遍历: 首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树,如果二叉树为空则返回。
- 中序遍历: 首先遍历左子树,然后访问根结点,最后遍历右子树。在遍历左、右子树时,仍然先遍历左子树,再访问根结点,最后遍历右子树。
可以推出,先序遍历的第一个元素就为二叉树的根结点。
又在中序遍历中,若找到根节点,则根节点左侧的为其左子树结点,右侧的为其右子树结点。
为了更方便阐述,设几个变量
- root: 当前根结点在先序遍历中的下标
- pos: 当前根结点在中序遍历中的下标
- left: 根树或子树的所有结点在中序遍历中的下标范围的左边界
- right: 根树或子树的所有结点在中序遍历中的下标范围的右边界(结点不包括右边界)
若根结点有左子树,则先序遍历中下标为