二叉排序树序列判定

###二叉排序树序列判定###

设二叉排序树中,关键字由1到1000的整数构成,现要查询关键字为363的结点,下述关键字序列中不可能是在二叉排序树上查找的序列是(C)

A. 2,252,401,398,330,344,397,363
B. 924,220,911,244,898,258,362,363
C. 925,202,911,240,912,245,363
D. 2,399,387,219,266,382,381,278,363

A. 二叉排序树序列判定_第1张图片
拉这么开的原因是想突出左子树一定比右子树小。这个树形是满足的,即查找序列正常。
其他的一样分析。

特别看C为什么错。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0AKxVepR-1571673236843)(https://img-blog.csdn.net/20161019162625632)]

看到红色数字,912是911的左子树,但是左子树居然比根大,这是不容许发生的,因此查找序列不合法!

2016.11.18 update:这篇虽然直接上手用了正确的方法解决,但是没有提炼出为什么这么做。

首先,给定的一个序列,一定是一条连通的路径。一个挨着一个。比如x,y;如果y>x,那么y就是从x往右走;如果y

有时候会恍惚以为,是用这序列重新构建排序二叉树,这是思维混乱的表现。查找序列,就是抽出一个路径,然后用看这个局部是不是满足排序二叉树要求。即:任何一棵左子树小于右子树。不必像这里的图故意散开来判断,就从最小的子树开始看起即可。

比如上图,
245,363满足。
912,245,363满足。
240,912,245,363满足。
911,240,912,245,363不满足,因为911往后都是911的左子树,不允许有比911大的,但是912出现了。这是不允许的。

2019.10 Update:

第一届PAT算法直播课培训班招募帖,欢迎点击查看详情、

END.

你可能感兴趣的:(算法学习)