【问题标题】:How can I tell if this matrix is a Binary Search Tree or Binary Tree.如何判断这个矩阵是二叉搜索树还是二叉树。
【发布时间】:2016-09-30 13:17:44
【问题描述】:

我正在尝试回答以下问题,但我不确定矩阵是二叉搜索树还是二叉树。有什么办法可以说吗?

在二叉搜索树上的两个节点之间找到最不共同的祖先。最小共同祖先是距作为两个节点的祖先的根最远的节点。例如,根是树上所有节点的共同祖先,但如果两个节点都是根左孩子的后代,那么该左孩子可能是最低的共同祖先。您可以假设两个节点都在树中,并且树本身遵循所有 BST 属性。函数定义应该类似于 question4(T, r, n1, n2),其中 T 是表示为矩阵的树,其中列表的索引等于存储在该节点中的整数,1 表示子节点, r 是表示根的非负整数,n1 和 n2 是表示两个节点的非负整数,无特定顺序。例如,一个测试用例可能是

question4([[0, 1, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[1, 0, 0, 0, 1],
[0, 0, 0, 0, 0]],
3,
1,
4)

【问题讨论】:

  • 这个问题不是已经暗示它是一个搜索树吗&(...) 树本身符合所有 BST 属性。
  • 是的,感谢您的回复。但我不相信我想知道它是否真的是 BST 的问题
  • 如果我正确理解了这个表示,那么2 没有连接到任何其他节点(假设从零开始索引)。因此,它根本不是树。除此之外,链接显然是隐含的。即,您需要自己维护 BST 属性。您可以检查是否可以从矩阵构建 BST。
  • (我这样解释矩阵:(3, ((0, 1), 4) - 请举例说明如何解释矩阵。行号对应于存储的值?!)
  • 谢谢@NicoSchertler,我不明白你从哪里得到 2?

标签: algorithm data-structures


【解决方案1】:

我认为,矩阵表示如下图:

矩阵应如下所示:

0 1 0 0 0
0 0 0 0 0
0 0 0 0 0
1 0 0 0 1
0 0 0 0 0

0 代表节点0。它在索引1 处有一个1,即节点1 是节点0 的子节点。相同的方法应该适用于其他行。例如。节点0 和节点4 是节点3 的子节点。

要检查图是否为树,请执行以下操作: 树中的每个节点(根节点除外)都只有一个父节点。因此,您需要确保矩阵中的所有列都恰好有一个 1 条目(根列除外,它应该没有 1 条目)。

要检查树是否是二叉树,您需要检查一个节点是否最多有两个孩子。您可以通过检查每一行是否最多有两个 1 条目来做到这一点。

要检查二叉树是否是二叉搜索树,您必须检查每个子树中是否最多有一个子树。 IE。在i行中,条目[0 .. i-1]中最多有一个1条目,条目[i+1 .. n-1]中最多有一个1条目。正如灰胡子指出的那样,这个条件是不充分的,因为它不考虑更高级别的祖先。要检查这一点,您需要构建树并从根遍历到叶,检查节点是否落在允许的区间内。

【讨论】:

  • 您好@NicoSchertler 感谢您的详细解释。我会接受答案,但我还有一个问题。看起来如果没有 2,树就变成了二叉搜索树,对吗?
  • (糟糕 - 一个 not 被复制而不是移动 - 下一次尝试:给定一个节点 p 及其子节点 c,c 位于 p 同一侧的 i>p 必须是 c 的后代。)
猜你喜欢
  • 2013-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-14
  • 2017-09-28
  • 2021-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多