• 数据结构与算法--树(tree)结构


    二叉树

    • 遍历原则:前序遍历是根左右, 中序遍历是左根右,后序遍历是左右根

    二叉搜索树

    • 特点:对于树中的每个节点X,它的左子树中所有节点的值都小于X,右子树中所有节点的值都大于X。
    • 遍历:采取二叉链表作 为二叉搜索树的存储结构。中序遍历可以得到一个有序序列。插入时,不必移动其他节点,只需改动某个节点的指针,由空变为非空即可。搜索、插入、删除的复杂度等于树高,即O(log(N))
    • 查找优势:查询最小节点,只需一直向左找到终止节点即可;查找最大,向右找到终止节点。

    平衡二叉树

    • 特点:它是一颗空树或者它的左右两个子树的高度差的绝对值不超过1。左右子树都是一颗平衡二叉树。

    判断树相等

    两个树相等,当且仅当RootA->data == RootB->data,而且左右子树对应相等或者互换后相等

    int CompTree(TreeNode *tree1, TreeNode *tree2)
    {
        bool isTree1Null = (tree1 == NULL);
        bool isTree2Null = (tree2 == NULL);
        // 其中一个为NULL,而另一个不为NULL,肯定不相等
        if (isTree1Null != isTree2Null)
            return 0;
        // 两个都为NULL,一定相等
        if (isTree1Null && isTree2Null)
            return 1;
        // 两个都不为NULL,如果data不等,一定不等
        if(tree1->data != tree2->data)
            return 0;
        //递归
        return (CompTree(tree1->left, tree2->left) & CompTree(tree1->right & tree2->right)) |
            (CompTree(tree1->left, tree2->right) & CompTree(tree1->right, tree2->left))
    }
    

    Trie树

    又称单词查找树、字典树,是一种哈希树的变种,是一种用于快速检索的多叉树结构。典型应用于统计和排序大量的字符串,所以经常被搜索引擎系统用于文本词频统计。

    • 优点:最大限度的减少无谓的字符串比较,查询效率比哈希表高
    • 思想:空间换时间,利用字符串比较的公共前缀来降低查询时间的开销,以提高效率的目的。

    四叉树

    一个包含n个节点的四叉树,每一个节点都有4个指向孩子节点的指针,这个四叉树有多少个空指针?
    解析:n个节点有n-1非空指针,其余皆为空指针。4*n-(n-1)=3*n+1

    红黑树

    红黑树与AVL的比较?

    • AVL是严格平衡树,因此在增加或删除节点时,根据不同的情况,旋转的次数要比红黑树多
    • 红黑是用非严格的平衡换区增删节点时候的旋转次数的降低
    • 如果搜索次数远大于插入和删除,那么选择AVL;如果搜索、插入、删除次数几乎差不多,应该选择RB

    红黑树的性质:

    1. 节点时红色或者黑色的
    2. 根节点是红色的
    3. Nil节点是黑色的
    4. 每个红节点的左子节点和右子节点必定是黑色的
    5. Nil节点在任意位置黑神东都相等
  • 相关阅读:
    python爬虫------处理cookie的相关请求
    开课第七周周总结
    python文件的读写
    分治算法二:二分查找
    读我自己
    分治算法二:归并排序
    分治算法一:汉诺塔
    渐增型算法三:划分序列
    渐增型算法二:合并两个有序序列
    渐增型算法一:插入排序
  • 原文地址:https://www.cnblogs.com/CocoML/p/12727014.html
Copyright © 2020-2023  润新知