回 帖 发 新 帖 刷新版面

主题:[讨论]怎么比较两个二叉搜索树是否相等?

如题

回复列表 (共7个回复)

沙发

前序遍历相等,中序遍历也相等。

同构的话就得考虑镜像同构了。

板凳


这样的话就要首先弄清楚两个树的前序和中序。如果输入是两组数量相同的任意数组,请问有没有办法在不构造树的情况下判别?

3 楼

我觉得对两棵树都线索化,然后直接都找各自的后继,如果都相同就相同了啊

/*数组吗,其实都触类旁通类

数组吗,先排序然后一一比较,不过效率低了点*/

哦,可能我没能理解你所说的数组的含义,感念太模糊了,不理解~

还有线索化的话,当然要同一个顺序线索化,否则再一个很凑巧的情况下也会相同

没有用代码证实过,也只是一个想法而已

4 楼

是我说的不够清楚。就是如果给你两个数的序列,每个序列拥有相同的元素。那么在不构建树的情况下,能不能判断两个序列的数分别构成的二叉搜索树是否相同?例如:
/*要求输入随机的两个数组,它们拥有相同个数的元素
当两个数组分别构成的二叉搜索树相同,返回true;否则,返回false*/
bool TreeEqual(int a[], int b[], int size)
{
}
就是问这个函数在不对a和b两个数组构建树的前提下,能不能判断如果把他们分别构建成一个二叉搜索树的话,这两颗树是否相同?(说的有点绕口,其实就是没有树的时候能不能判断如果有树的话,两颗树是否相同。。。郁闷了。。。)

5 楼

恩,我想我已经理解了你的意思


不构造树的情况下判别两棵树是否相同

你难道没觉得你这句话已经矛盾了吗?
请问没有构造树那里来的树相等

其实你只是觉得麻烦,所以想入非非..."懒"人有"懒"法
但是我觉得树是一个形态

不管是先序,中序还是后序都会造成树的变化,所以还是要构造一棵数才能来判断

比如你要判断一组数是否相同,有必要申请一个数组,再来一一比较如此而已

6 楼


呵呵。我也觉得这个东西本身就是有矛盾的。别人给我这个题的时候,我也是用上述的方法作的。后来他就说你找前序中序的,就等于已经构建了树。能不能有一种方法在不构建的情况下“预判”。所以我想,是不是有什么深层的数学方法可以“预判”,而我不知道。

7 楼

恩,你说的也不是没有道理

再你预知一棵树的先序,后序的前提的下,再用数学方法来解决也不是为一个“懒”
的好方法,应该可以实现,其实过程并不是死的,只要结果一样都是方法

呵呵,那我想 这个不就是直接判断了啊,你是不是也再为如何给出这个问题所困惑啊~

可能我是一直从要遍历的角度去考虑这个问题了,所以思想被定格了~
[em19]

我来回复

您尚未登录,请登录后再回复。点此登录或注册