BST:使用另一个键按排序顺序打印树

时间:2013-12-09 09:36:51

标签: c binary-search-tree

我的二进制树在C中有下一个结构代码:

struct student
{
    int studentID;
    char lastName[MAX_LENGTH];
    char firstName[MAX_LENGTH];
    float amount;
};

struct node
{
    struct student* record;
    struct node* left;
    struct node* right;
};

使用studentID字段作为键将记录插入树中。当我按照studentID的顺序打印树时,一切都很好。但我想按照lastName字段的顺序打印SAME树。

我只有一个想法:将树复制到数组,排序数组和显示数组。

还有其他解决方案吗?

2 个答案:

答案 0 :(得分:1)

您可以并行构建和维护多个二叉搜索树,可选择将它们折叠成单个多索引数据结构:

struct node {
    struct student *record;
    struct node *left_by_id, *right_by_id,
                *left_by_name, *right_by_name;
};

显然,必须修改所有BST操作才能使其正常工作:例如要插入新的struct student*,您必须将一个node绑定到两棵树中。

答案 1 :(得分:0)

为lastName创建索引。您可以使用另一个BST,它将lastName作为键存储,并指向原始BST中相应节点的指针。

struct indexNode {
    char lastName[MAX_LENGTH]
    struct node* originalNode;
};

您可以在原始树中插入数据时继续插入此树。

这样您就必须花费O(log n)空间来存储额外的索引树,但会将基于lastName的搜索时间减少到O(log n)。此外,实际上您将只存储每个元素的节点的键和指针。