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

使用预序和按序遍历重建二叉查找树

孙翰墨
2023-03-14

我在研究一个重建二叉查找树的函数。我正试着先用手做。

说我有:pre-10,3,5,4,15,7,8,2,9,20 in-4,5,3,15,10,20,8,7,9,20

我弄不明白。我知道10必须是根,顺序序列中10左边的所有数字都必须在右边的子树中。

那会给我 4,5,3,15

15大于10,并且为了成为二叉查找树,左子树中的所有节点应该小于根。

这是否意味着这两个序列形成了一个无效的二叉搜索树?

共有1个答案

仲承福
2023-03-14

你是对的。根据你已经给出的顺序遍历,你的树似乎不是BST。10必须是根节点,正如你在查看顺序遍历中的第一个节点时所得到的。顺序遍历中10左边的所有内容都应该在左子树中,10右边的所有内容应该在右子树中。正如你所指出的,15不可能在10的左边(或7、8和9在10的右边)。尽管如此,你仍然可以根据这些数据重建一棵树。它只是没有按排序顺序排列的节点。

 类似资料:
  • 我正在查看LeetCode问题98。验证二进制搜索树: 给定二叉树的,确定它是否是有效的二叉搜索树 (BST)。 有效的BST定义如下: 节点的左子树仅包含键小于节点键的节点。 节点的右子树仅包含键大于节点键的节点。 左右子树也必须是二叉搜索树。 下面提供的用前序遍历验证二叉树属性的代码有什么问题? 对于的测试用例,它将返回

  • 我试图使用队列的链表实现实现二叉搜索树的级别顺序遍历。 我已经检查了二叉查找树的实现,它是好的。队列的链表实现也是正确的。在这里,我试图访问节点并将其子节点排队。然后使用弹出函数实际访问节点。 这最终是通过递归调用完成的。当我运行以下代码时,我以不同的顺序获得输出。

  • 本文向大家介绍C#使用前序遍历、中序遍历和后序遍历打印二叉树的方法,包括了C#使用前序遍历、中序遍历和后序遍历打印二叉树的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#使用前序遍历、中序遍历和后序遍历打印二叉树的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 对于二叉搜索树:7为根,1为左子,10为右子。 我试过调试这个函数,看看它是如何工作的,但我似乎不能理解一件事。函数检查并看到1的左子项和右子项都为空后,它就移动到节点10,然后检查右子项是否为空。有人能解释一下递归模式,以及为什么方法在初始检查节点1后没有退出。

  • 为了上课,我必须创建一个状态对象的二叉树,每个状态对象包括一个居民对象的二叉树,这些居民对象组织住在每个州的人。我试图在一个给定的州中搜索最老的居民;然而,居民是按字母顺序组织在树中的,这对我的搜索毫无帮助。因此,我必须遍历整个居民树,更新保存最老的人的节点,并在树被完全遍历后返回它。我已经有了代码的第一部分,但是还停留在如何写递归的剩余部分。 状态树的方法: 然后是公共“包装器”状态树方法:

  • 中序遍历二叉树 按完全二叉树的层次遍历给出一棵二叉树的遍历序列(其中用0表示虚结点),要求输出该二叉树的深度及中序遍历该二叉树得到的序列。 输入格式: 首先输入一个整数T,表示测试数据的组数,然后是T组测试数据。每组测试数据首先输入一个正整数n(n≤1000),代表给出的二叉树的结点总数(当然,其中可能包含虚结点)。结点编号均为正整数,且各不相同。 然后输入n个正整数,表示按完全二叉树(即第1层1