通常我们按顺序,预订或后序遍历二进制搜索树。但是当我们以下面的递归顺序遍历二进制搜索树时会发生什么?从右 - 根-Left?
假设我将数值存储在一个数组中,并且当我们按照这个顺序进行遍历时,与前序遍历相比,它的时间复杂度是否会增加。
答案 0 :(得分:1)
让我们使用示例二进制搜索树:
5
/ \
3 7
/ \ / \
2 4 6 8
有序遍历(左树,根,右树)
2 3 4 5 6 7 8
我们是怎么做到的?
伪代码:
InorderTraversal(root)
{
if root is not null:
InorderTraversal(root.left)
print root
InorderTraversal(root.right)
}
让我们在树上玩电脑
右根左遍历
8 7 6 5 4 3 2
伪代码:
RightRootLeftTraversal(root)
{
if root is not null:
RightRootLeftTraversal(root.right)
print root
RightRootLeftTraversal(root.left)
}
正如您所看到的,这与有序遍历完全相反。在二叉搜索树上,我们将得到反向排序的遍历。
操作次数与前序遍历相同,即O(n),因为我们一次访问每个节点。