当前位置: 首页 > 知识库问答 >
问题:

二叉搜索树按以下顺序递归遍历右根左?

王君墨
2023-03-14

通常我们按顺序、前顺序或后顺序遍历二叉搜索树。但是,当我们按照从右到根到左的递归顺序遍历二叉搜索树时,会发生什么呢?

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

共有1个答案

柳宾实
2023-03-14

让我们使用一个示例二叉查找树:

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

让我们在树上玩电脑

  • 从根开始(5)
  • Root(5)不为空,因此请访问left
  • 根(3)不为空,因此请访问左侧
  • 根(2)不为空,因此请访问左侧
  • Root(null)为null,返回
  • 打印2
  • 访问右树2
  • Root(null)为null,返回
  • 打印根目录(3)
  • 访问右三棵树
  • Root(4)不为空,请访问左侧
  • Root(null)为null,返回
  • 打印根目录(4)
  • 访问右四棵树
  • root(null)为null,返回
  • 打印根目录(5)
  • 访问右五棵树
  • 根(7)不为空
  • 打印根目录(8)
  • 访问根的右子树(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),因为我们访问每个节点一次。

 类似资料:
  • //执行顺序遍历的递归方法

  • 我正在研究一个函数,它在C语言中的二进制搜索树中搜索一个与函数一起传入的名称。但是,我一直在想如何设置循环的格式,这样,当遍历到达最左边的节点时,回退不会简单地结束,而没有子节点。遍历必须是预购的(访问我自己,然后访问我的左孩子,然后访问我的右孩子)。 正如您所看到的,当前,当它到达与传递到函数中的字符串不匹配的最左侧节点时,它只返回NULL。如果它没有在树中找到匹配,我必须让它返回NULL,但同

  • 编写一个函数,如果给定的二叉搜索树包含给定的值,则返回1,否则返回0。 例如,对于以下树: N1(值:1,左:null,右:null) n2(值:2,左:n1,右:n3) N3(值:3,左:null,右:null) 对contains(&n2,3)的调用应返回1,因为根位于n2的树包含编号3。 函数应该返回1,然而,它返回0或者根本不返回。

  • 主要内容:递归实现,非递归实现二叉树后序遍历的实现思想是:从根节点出发,依次遍历各节点的左右子树,直到当前节点左右子树遍历完成后,才访问该节点元素。 图 1 二叉树   如图 1 中,对此二叉树进行后序遍历的操作过程为: 从根节点 1 开始,遍历该节点的左子树(以节点 2 为根节点); 遍历节点 2 的左子树(以节点 4 为根节点); 由于节点 4 既没有左子树,也没有右子树,此时访问该节点中的元素 4,并回退到节点 2 ,遍

  • 主要内容:递归实现,非递归实现二叉树中序遍历的实现思想是: 访问当前节点的左子树; 访问根节点; 访问当前节点的右子树; 图 1 二叉树   以图  1 为例,采用中序遍历的思想遍历该二叉树的过程为: 访问该二叉树的根节点,找到 1; 遍历节点 1 的左子树,找到节点 2; 遍历节点 2 的左子树,找到节点 4; 由于节点 4 无左孩子,因此找到节点 4,并遍历节点 4 的右子树; 由于节点 4 无右子树,因此节点 2 的左子

  • 主要内容:递归实现,非递归实现二叉树先序遍历的实现思想是: 访问根节点; 访问当前节点的左子树; 若当前节点无左子树,则访问当前节点的右子树; 图 1 二叉树   以图  1 为例,采用先序遍历的思想遍历该二叉树的过程为: 访问该二叉树的根节点,找到 1; 访问节点 1 的左子树,找到节点 2; 访问节点 2 的左子树,找到节点 4; 由于访问节点 4 左子树失败,且也没有右子树,因此以节点 4 为根节点的子树遍历完成。但节点