二叉搜索树

有一个二叉搜索
树用来存储字符'A', 'B', 'C','D','E','F','G','H'下面哪个结果是后序树遍历结果)[美国著名软件
公司M2009年11月笔试题]

A.ADBCEGFH
B.BCAGEHFD
C.BCAEFDHG
D.BDACEFHG
解析:二叉搜索树(Binary Search Tree),或者是一棵空树,或者是具有下列性质的二
叉树:对于树中的每个节点X,它的左子树中所有关键字的值都小于X的关键字值,而它的
右子树中的所有关键字值都大于X的关键字值。这意味着该树所有的元素都可以用某种统一
的方式排序。
例如下面就是一棵合法的二叉搜索树:

它的左、右子树也分别为二叉搜索树。
二叉搜索树的查找过程和次优二叉树类似,通常采取二叉链表作为二叉搜索树的存储节
构。中序遍历二叉搜索树可得到一个关键字的有序序列,一个无序序列可以通过构造一棵二
叉搜索树变成一个有序序列,构造树的过程即为对无序序列进行排序的过程。每次插入的新
的节点都是二叉搜索树上新的叶子节点,在进行插入操作时,不必移动其他节点,只需改动
某个节点的指针,由空变为非空即可。搜索、插入、删除的复杂度等于树高,即O(log(n))。
二叉树的一个重要的应用是它们在查找中的使用。二叉搜索树的概念相当容易理解,二
叉搜索树的性质决定了它在搜索方面有着非常出色的表现:要找到一棵树的最小节点,只需
要从根节点开始,只要有左儿子就向左进行,终止节点就是最小的节点。找最大的节点则是
往右进行。例如上面的例子中,最小的节点是1,在最左边;最大的节点是8,在最右边。
对于本题而言,二叉搜索树则必满足对树中任一非叶节点,其左子树都小于该节点值,
右子树所有节点值都大于该节点值。节合二叉树后序遍历的特点,最后一个肯定是根节点
A.ADBCEGFH
->(H)左子树(ADBCEGF),右子树(空) (左子树必须都小于根H,右子树都大于根H)
-->(F)左子树(ADBCE),右子树(G)
--->(E)左子树(ADBC),右子树(空)
---->(C)剩下(ADB)不能区别左子树,右子树,所以选项A不成立;
B.BCAGEHFD
->(D, (BCA), (GEHF))
-->GEHF, F为根,剩下GEH不能根据F分成两个子段,所以B不成立;
C.BCAEFDHG
->(G, (BCAEFD), (H))
-->(G, (D, (BCA), (EF)), (H))
--->(G, (D, (A, (), (BC)), (F, (E), ())), (H))
---->(G, (D, (A, (), (C, (B), ())), (F, (E), ())), (H))

选项C成立;
D.BDACEFHG
->(G, (BDACEF), (H))
-->(G, (F, (BDACE), ()), (H))
--->(G, (F, (E, (BDAC), ()), ()), (H))
---->BDAC子树,C为根,据C不能将序列BDA划分为两个子序列,使得左子序列全小于
C,右子序列全大于C
所以选项D不成立。
答案:C

posted @ 2017-02-08 17:29  我有一壶酒  阅读(477)  评论(0编辑  收藏  举报