zoukankan      html  css  js  c++  java
  • 二叉搜索树

    有一个二叉搜索
    树用来存储字符'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

  • 相关阅读:
    Nhibernate初学
    TSQL笔记
    Java是剑客飘逸;.NET是刀客霸道 (一) 【转载】
    在datagrid中求和(vb.net,c#)
    Java牢骚之我见(转载)
    Java是剑客飘逸;.NET是刀客霸道 (二) 【转载】
    可可西里观后感(转)保护藏羚羊
    .net快速入门方法,转csdn
    手工添加“显示桌面”快捷方式
    过年128>24
  • 原文地址:https://www.cnblogs.com/yihujiu/p/6379179.html
Copyright © 2011-2022 走看看