树61排序二叉树源程序名treepasccpp可执行文件名tree.DOC

树61排序二叉树源程序名treepasccpp可执行文件名tree.DOC

树61排序二叉树源程序名treepasccpp可执行文件名tree

树 61 排序二叉树 【知识准备】 记忆化搜索的基本概念和实现方法。 【算法分析】 在讨论问题的解法之前,我们先来看看二叉排序树的性质。 二叉排序树是一棵满足下列性质的二又树: 性质1 它或是一棵空树,或是一棵二叉树,满足左子树的所有结点的值都小于根结点的值,右子树的所有结点的值都大于根结点的值; 性质2 它若有子树,则它的子树也是二叉排序树。 根据性质1,我们可以知道,二叉排序树的左右子树是互不交叉的。也就是说,如果确定了根结点,那么我们就可以将余下的结点分成两个集合,其中一个集合的元素可能在左子树上,另一集合的元素可能在右子树上,而没有一个结点同时可以属于两个集合。这一条性质,满足了无后效性的要求,正因为二叉排序树的左右子树是互不交叉的,所以如果确定根结点后,求得的左子树,对求右子树是毫无影响的。因此,如果要使排序树尽可能大,就必须满足左右子树各自都是最大的,即局部最优满足全局最优。 根据性质2,二叉排序树的左右子树也是二叉排序树。而前面已经分析得到,左右子树也必须是极大的。所以,求子树的过程也是一个求极大二叉排序树的过程,是原问题的一个子问题。那么,求二叉排序树的过程就可以分成若干个阶段来执行,每个阶段就是求一棵极大的二叉排序子树。 由此,我们看到,本题中,二叉排序树满足阶段性(性质2)和无后效性(性质1),可以

文档评论(0)

1亿VIP精品文档

相关文档