【问题标题】:Creating a right skewed binary tree in C在 C 中创建一个右偏二叉树
【发布时间】:2014-10-26 23:00:23
【问题描述】:

在这个程序中,用户应该能够从输入整数序列创建任意二叉树,并且他们应该能够在balancedleft_onlyright_only 之间进行选择。我为平衡二叉树创建了它,但现在我无法将它调整为仅右树和仅左树。

struct node {
    int data;
    struct node* left;
    struct node* right;
};

struct tree {
    struct node* root;
};

int init(struct tree* t) {
    t->root = 0;
    return 1;
}

struct node* makeNode(int d) {
    struct node* ptr;
    ptr = (struct node*)malloc(sizeof(struct node));
    ptr->data = d;
    ptr->left = ptr->right = 0;
    return ptr;
}

// sorting the binary tree
struct node* insertrchild(struct node* n, int d) {
    return (n->right = makeNode(d));
}
struct node* insertlchild(struct node* n, int d) {
    return (n->left = makeNode(d));
}

struct node* insertbst(struct node** ptr, int d) {
    if (*ptr == 0)
        return (*ptr = makeNode(d));
    if (d > (*ptr)->data)
        insertbst(&(*ptr)->right, d);
    else
        insertbst(&(*ptr)->left, d);
}

void inorder(struct node* ptr) // Print Tree
{ // Perform Inorder Traversal of tree
    if (ptr == 0) {
        return;
    }
    inorder(ptr->left);
    printf(" %d ", ptr->data);
    inorder(ptr->right);
}

void preorder(struct node* ptr) {
    if (ptr == 0)
        return;
    printf("%i\t", ptr->data);
    preorder(ptr->left);
    preorder(ptr->right);
}

void postorder(struct node* ptr) {
    if (ptr == 0)
        return;
    postorder(ptr->left);
    postorder(ptr->right);
    printf("%i\t", ptr->data);
}

如何调整这段代码?

【问题讨论】:

  • 你的代码中没有任何东西可以平衡你的树;树的平衡(或不平衡)仅由节点插入树的顺序控制。
  • 我有平衡代码。我使用了这里没有包含的 DSW 平衡算法。

标签: c binary-tree treenode adjustment


【解决方案1】:

二叉树,正如我一直理解的那样(也许,我完全错了),有一个顺序。每个小于当前节点的新元素都向左移动。大于当前节点的每个节点都向右移动。反之亦然。
在您的示例中,您具有将新节点放在左侧或右侧的功能。所以有什么问题?调用右插入,您将拥有右藤,调用左插入,您将拥有左藤,但没有任何意义(恕我直言)。
通常,平衡二叉树是插入良好分布值的结果(因此,打乱了)。例如,插入 10、7、9、12、6

如果您插入有序集,您将制作一个藤蔓。例如 3, 4, 6, 7, 9, 10, 11, 12 ,14

另外,你可以做类似的东西

如果插入 10、50、15、45、20、35、30、34、31(有序和无序集,一个接一个)。它和 vine 一样,有 O(n) 的搜索时间。

【讨论】:

  • 你玩这些图很开心!
  • 我有一张适用于所有情况的二叉树大图,并且必须针对不同的问题对其进行切割
  • @IvanIvanov,真的吗?那么什么是二叉搜索树呢?出队? AFAIK 二叉树没有顺序。
猜你喜欢
  • 2015-02-08
  • 1970-01-01
  • 2016-07-30
  • 2017-07-01
  • 1970-01-01
  • 2015-10-30
  • 1970-01-01
  • 2021-12-20
相关资源
最近更新 更多