二进制搜索树以递归方式按以下顺序遍历右根左?

时间:2016-07-06 17:49:41

标签: arrays algorithm recursion tree time-complexity

通常我们按顺序,预订或后序遍历二进制搜索树。但是当我们以下面的递归顺序遍历二进制搜索树时会发生什么?从右 - 根-Left?

假设我将数值存储在一个数组中,并且当我们按照这个顺序进行遍历时,与前序遍历相比,它的时间复杂度是否会增加。

1 个答案:

答案 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)
}

让我们在树上玩电脑

  • 从root(5)开始
  • Root(5)不为null,因此请访问
  • Root(3)不为null所以请访问
  • Root(2)不为null所以请访问
  • Root(null)为null,返回
  • 打印 2
  • 访问2
  • 的右树
  • Root(null)为null,返回
  • 打印根( 3
  • 访问3
  • 的右树
  • Root(4)不为null,请访问左侧
  • Root(null)为null,返回
  • 打印根( 4
  • 访问4
  • 的右树
  • root(null)为null,返回
  • 打印根( 5
  • 访问5
  • 的右树
  • Root(7)不为空
  • ...
  • 打印根( 8
  • 访问root(8)
  • 的右子树
  • root(null)为null,返回

右根左遍历

  

8 7 6 5 4 3 2

伪代码:

RightRootLeftTraversal(root)
{
   if root is not null:
      RightRootLeftTraversal(root.right)
      print root
      RightRootLeftTraversal(root.left)
}

正如您所看到的,这与有序遍历完全相反。在二叉搜索树上,我们将得到反向排序的遍历。

操作次数与前序遍历相同,即O(n),因为我们一次访问每个节点。