基础二叉树

2020-02-23 

今天学了一下BST

有如下内容:

二叉树的前序遍历:根->左->右;

    中序遍历:左->根->右;

    后序遍历: 左->右->根;

    层次遍历:广搜即可;

前序遍历的第一个节点为根节点;

后序遍历的最后一个节点为根节点;

利用中序遍历可以得出每个节点的左右子树;

因此,已知中序遍历+前序遍历//后序遍历可得到整个树;

但如果是BST,只需要知道前序或者后序即可,因为平衡二叉树的特点,你找到了一个根节点,那么左子树都比它小,右子树都比它大;扫一遍前序遍历的序列就可以得到一个点的左右子树情况,递归处理即可;

2020-02-23  22:27:28

今天学了一下堆,大概是这么个东西;

你如果想造一个优先队列:那怎么做呢?

如果用BST来做,每次查找出优先级最大的点,复杂度log(n),那这样不断的取出队头的元素,会把树删得乱七八糟,最后访问可能就是o(n)的;那你说每次删掉平衡一下可以吗?有些麻烦;

考虑用完全二叉树实现:

最大堆:根节点为最大值;

最小堆:根节点为最小值;

插入:每次随便找个能放的位置放,然后调整,Olog(n)的复杂度;

删除:每次把根删除,然后找个能放的子孙放进去,然后调整,log(n)

建立堆:就是给个序列,随便建立一个完全二叉树,然后从下往上调整最终调整为堆,0(n),注意是边建立,边调整;

未完待续;

想的太多,做的太少;
原文地址:https://www.cnblogs.com/littlerita/p/12346809.html