可以根据前序与后续序列,分析出根节点为A,然后将前序与后续序列依次去掉A,如果剩余序列的长度仍然大于2,则依次分析出根节点并去掉,直至序列剩余两个元素,最后根据排列组合原理计算出可以构造的二叉树数目;
解法一:将A-D的中序遍历选项带入,分析是否能够构造出一个二叉树,如果可以则结果是正确的;
解法二:按照前序为入栈次序,分析中序是否为可能出栈序列;
在能确定二叉树的组合之中,两序列分工明确,一个序列用于找出根节点,另一个序列通过上述找到的根节点来进行左右子树的划分;
首先通过后序序列与中序序列确定二叉树,然后根据已知的二叉树去顶先序序列;
这一题其实比较综合,因为如果是普通的二叉树,不管是递归顺发还是非递归算法都是需要栈的支持的,那么通过对二叉树线索化,可使得前序线索树与中序线索树不需要的栈的支持了,原因如下:
对于线索树而言,所以的叶子结点都是指向结点的前驱与后继的,所以我们只需要研究非叶子结点即可!
对于先序线索树中的非叶子结点,它的前驱就是当前结点的左孩子,它的后继就是当前节点的右孩子;
对于中序线索树中的非叶子结点,它的前驱是其左子树的最右的结点;它的后继是其右子树最左边的结点。
分析得知:任意结点不能左右孩子同时拥有,二者只能居其一,因此其高度等于其结点数;
这一题实际是一道技巧性的题目,由前面的知识已知,前序和中序序列可以唯一确定一颗二叉树,而前序序列与中序序列的关系相当于以前序序列为入栈次序,以中序序列为出栈次序,对于n个不同的元素入栈,出栈序列的个数为
1
n
+
1
C
2
n
n
\frac{1}{n+1}C_{2n}^{n}
n+11C2nn
由森林转换为二叉树后的结点右指针为空,则表示组成森林的每一颗树,转换为二叉树后,哪些结点没有右孩子; 此时回到森林,每一个非终端结点一定有孩子,而有孩子则意味着将其转换为二叉树后必有最右侧的结点没有孩子,即右指针为空,那么原森林的n个非终端结点转换为二叉树后就有n个结点没有右孩子(右指针为空),而将多颗树组成的森林转换为二叉树时,最后一个树的根节点一定没有右孩子,所以答案是n+1。
首先,我们根据树转换为二叉树的规则可知,二叉树中无右孩子的结点可以转换为树中没有兄弟的结点,而我们可以对树进行一个抽象的思考,就是一棵树是由一颗主分支,然后不断的在主分支上加结点而构成的其他分支,多一条分支,就多一个叶子结点,也多一个结点有了兄弟结点,而一共有116个叶子节点,就说在在主分支上多了115个分支,因此就有115个结点有了兄弟结点,即没有兄弟结点的数目为2011-115=1896。