1.前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。
中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。若二叉树为空则结束返回
后序遍历首先遍历左子树,然后遍历右子树,最后访问根结点,在遍历左、右子树时,仍然先遍历左子树,然后遍历右子树,最后遍历根结点。
前序遍历:根左右
中序遍历:左根右
后序:左右根
前序遍历结果:ABDECF
中序遍历结果:DBEAFC
后序遍历结果:DEBFCA
已知前序遍历和中序遍历,就能确定后序遍历
2.逆波兰表达式把运算量写在前面,把算符写在后面。例如(a+b)(c+d)转换为ab+cd+。逆波兰式中不存在括号.
3.栈是一种后进先出的数据结构
4.哈夫曼树:给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。
树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)
5.宽度优先遍历用队列,深度优先遍历用栈
6. 采用二分搜索时取中间值即48进行比较,显然48小于72。所以搜索范围变为48的右侧。
然后同理取中间值72进行比较,得到结果程序结束。
所以比较了两次
7. 插入排序:如果平均每个元素离最终位置相距c个元素,则其复杂度为O(cn),一共n趟,每次比较c次;
快速排序:最好的、平均的复杂度都是O(nlog(n)),如果每次选择的中间数都最小或最大,那就是最坏的情况,复杂度是O(nn);所以快速排序和元素的位置没有关系,跟选择的中间数有关。
堆排序:复杂度一直是O(nlog(n));
直接选择排序:跟元素位置没有关系,都要遍历n遍,每遍找出最小或最大数来,复杂度是O(nn);