簡體   English   中英

在C中創建右偏二叉樹

[英]Creating a right skewed binary tree in C

在這個程序中,用戶應該能夠從輸入整數序列創建任意的二進制樹,他們應該能夠選擇之間進行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);
}

如何調整此代碼?

我一直都知道,二叉樹的結構(也許,我完全錯了)具有順序。 每個新元素(小於當前節點)都向左移動。 大於當前節點的每個節點都向右移動。 或相反亦然。
在您的示例中,您具有將新節點放在左側或右側的函數。 所以有什么問題? 調用右插入,您將擁有右藤,調用左插入,您將具有左藤,但沒有任何意義(恕我直言)。
通常,平衡二叉樹是插入良好分布值的結果(因此,經過改組)。 例如,插入10、7、9、12、6

在此處輸入圖片說明

如果您插入有序集,您將制造一棵葡萄樹。 例如3、4、6、7、9、9、10、11、12、14

在此處輸入圖片說明

另外,您可以制作類似

在此處輸入圖片說明

如果插入10、50、15、45、20、35、30、34、31(有序和無序集合,一個接一個)。 它像藤一樣具有O(n)進行搜索。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM