• 二叉树复习


    其实这篇文章曾经也在初赛复习里。。

    一个比较好的博客

    • 满二叉树:比较简单,就是一颗满的二叉树 废话

    • 完全二叉树:也比较简单,就是除了最后一层,上面都是满的,而最后一层的叶子结点都集中在左边。

    • 平衡二叉树:是一颗空树或者对于每一个节点,他的左子树和右子树高度差不超过1,矮矮胖胖好身材

    • 二叉搜索(查找、排序)树,满足以下条件:

    1. 左子树上的所有节点值均小于根节点值
    2. 右子树上的所有节点值均不小于根节点值
    3. 左右子树也满足上述两个条件
    4. 对二叉树进行中序遍历时,其输出是一个有序数组

    但它有一个问题,如果想要卡的话可以把这棵树卡成一条链,所以就要用到二叉平衡树。

    • 哈夫曼树:给定N个权值作为N个叶子结点,构造一棵二叉树,使该树的带权路径长度达到最小。简单来说就是在哈夫曼编码里面,每次选出现次数(权值)最小的两个点合并,然后将每一条树枝标上0和1,该点的编码就是从根节点到这个点的路径上的0,1串 感觉说了一堆废话

    还是上图现实

    手打堆也是考的比较多的内容,要记的熟练一些,特别是一些细节。

    贴一点模板:

    namespace Heap{
    	void insert(int x){
    		tre[++sz]=x;
    		int nw=sz;
    		while(nw>1){
    			int nxt=nw>>1;
    			if(tre[nxt]>tre[nw])swap(tre[nxt],tre[nw]);
    			else return;
    			nw=nxt;
    		}
    	}
    	void del(int x){
    		swap(tre[sz],tre[x]);
    		sz--;int nw=x;
    		while(nw*2<=sz){
    			int nxt=nw<<1;
    			if(nxt+1<=sz&&tre[nxt+1]<tre[nxt])nxt++;
    			if(tre[nxt]<tre[nw])swap(tre[nxt],tre[nw]);
    			else return;
    			nw=nxt;
    		}
    	}
    }
    

    再来一点例题:

    • 小顶堆初始序列为 [0,3,2,5,7,4,6,8],在删除堆顶元素0之后,其结果是()。

    A.[3,2,5,7,4,6,8]

    B.[2,3,5,7,4,6,8]

    C.[2,3,4,5,7,8,6]

    D.[2,3,4,5,6,7,8]

    答案:C 对小顶堆操作的理解

    删掉0之后,先把8放到最上面[8,3,2,5,7,4,6],然后向下比较,第一个点的左右儿子编号是2、3,和2交换位置[2,3,8,5,7,4,6],再向下比较,左右儿子编号是6、7,和4交换位置[2,3,4,5,7,8,6],此时8已经没有叶子结点就停止。

  • 相关阅读:
    距离的总和
    [leetcode] 397. Integer Replacement
    [leetcode] 396. Rotate Function
    [leetcode] 398. Random Pick Index
    [leetcode] 399. Evaluate Division
    [算法] get_lucky_price price
    Geoserver(一) Geoserver2.15.4配置发布arcgis切片
    Geoserver(二) geoserver配置mysql插件
    OpenLayers4地图实例-功能齐全
    OpenLayers Node环境安装运行构建-支持Vue集成OpenLayers
  • 原文地址:https://www.cnblogs.com/tangzhiyang/p/11800340.html
Copyright © 2020-2023  润新知