堆是完全二叉树 在第五章的时候创建了一个二分搜索树 既然都是二叉树 那为什么堆不用二分搜索树的结构

来源:5-2 二分搜索树基础 (Binary Search Tree)

慕粉3759846

2017-10-10

在堆中是用数组实现的
    MaxHeap(int capacity) {
        data = new Item[capacity + 1];
        count = 0;
        this->capacity = capacity;
    }
在二分搜索树是用一个结构体的结构实现的
    struct Node {
        Key key;
        Value value;
        Node *left;
        Node *right;
        
        Node(Key key, Value value) {
            this->key = key;
            this->value = value;
            this->left = this -> right = NULL;
        }
    };

那既然两个都是二叉树 为什么在实现堆的时候 不用二分搜索树的结构体里的结构 而是用数组呢?

写回答

1回答

liuyubobobo

2017-10-11

因为堆是一棵完全二叉树,可以方便的使用数组的形式表达,这样不仅节省了left,right两个指针的空间,还完全不需要麻烦的指针操作。实现堆使用数组做底层结构,不尽代码简洁,总体效率也高。当然了,如果你愿意,也完全可以使用二叉树结构体的方式来实现堆:)

0
0

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11187 学习 · 1614 问题

查看课程