如何判断一个序列是不是二叉排序树的查找序列?
可不可以这样设想,从第二个元素开始,若该元素大于前一个元素a,则该元素后边的元素均小于a,若该元素小于前一个元素a,则该元素后边的元素均大于a,然后依次检测到最后,这样判...
可不可以这样设想,从第二个元素开始,若该元素大于前一个元素a,则该元素后边的元素均小于a,若该元素小于前一个元素a,则该元素后边的元素均大于a,然后依次检测到最后,这样判断对吗
教材上的答案是:设序列最后一个元素也就是要查找的元素为a,将序列依次分离为大于a和小于a的两个序列,若这两个序列均有序,则序列是二叉排序树的查找序列。
不过我感觉这个答案代码比较繁琐,不知道我上边提出的设想对不对。 展开
教材上的答案是:设序列最后一个元素也就是要查找的元素为a,将序列依次分离为大于a和小于a的两个序列,若这两个序列均有序,则序列是二叉排序树的查找序列。
不过我感觉这个答案代码比较繁琐,不知道我上边提出的设想对不对。 展开
2个回答
展开全部
你的设想很好,这是根据二叉排序树的性质可以推出的判断方法。
事实上这种思路也是选择题中对这种题型的快速判断方法,在本题中代码也足够简洁。不过你的描述写反了,应该是如果后继元素大于前一个元素A,则后面的所有元素均应大于A,反之则均应都小于A。
不过这种描述挺绕,我一般直接这样描述。从第一个元素开始直到循环至列尾,逐个判断,如果它的后继元素比他大,那么后面的所有元素均应比他大,反之均应比他小。
1.比如46,36,18,28,35这个序列
46比36大,那么46应该比36后面的18 28 35都大,没问题
36比18大,那么36应该比18后面的28 35都大,没问题
18比28小,那么18应该比28后面的35都小,没问题
28比35小,到序列尾部了...
因此该序列确实是二叉排序树的查找序列。
2.再比如28 36 18 46 35这个序列
28比36小,那么28应比36后面的18 46 35都小。
欸,28比18大呀,这说明该序列就不是二叉排序树的查找序列了。
事实上这种思路也是选择题中对这种题型的快速判断方法,在本题中代码也足够简洁。不过你的描述写反了,应该是如果后继元素大于前一个元素A,则后面的所有元素均应大于A,反之则均应都小于A。
不过这种描述挺绕,我一般直接这样描述。从第一个元素开始直到循环至列尾,逐个判断,如果它的后继元素比他大,那么后面的所有元素均应比他大,反之均应比他小。
1.比如46,36,18,28,35这个序列
46比36大,那么46应该比36后面的18 28 35都大,没问题
36比18大,那么36应该比18后面的28 35都大,没问题
18比28小,那么18应该比28后面的35都小,没问题
28比35小,到序列尾部了...
因此该序列确实是二叉排序树的查找序列。
2.再比如28 36 18 46 35这个序列
28比36小,那么28应比36后面的18 46 35都小。
欸,28比18大呀,这说明该序列就不是二叉排序树的查找序列了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询