2014-09-02 41 views
-1

在這個程序中,用戶應該能夠從輸入整數序列創建一個任意的二叉樹,他們應該能夠選擇到balancedleft_only,right_only。我爲平衡二叉樹創建了它,但是現在我無法將其僅調整到正確的位置,只剩下樹。在C中創建一個右斜二叉樹

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); 
} 

如何調整此代碼?

+1

你的代碼中沒有任何東西可以平衡你的樹;樹的平衡(或不平衡)完全由節點呈現插入樹中的順序來控制。 – 2014-09-02 16:20:58

+0

我有平衡的代碼。我使用了不包括在這裏的DSW平衡算法。 – user2750830 2014-09-03 03:54:55

回答

2

二叉樹,正如我一直理解的結構(也許,我完全錯了),有一個順序。每個新元素(小於當前節點)都會左移。大於當前節點的每個節點都向右移動。或相反亦然。
在你的例子中,你有使新節點在左邊或右邊的功能。所以有什麼問題?呼叫右插入,你會得到正確的葡萄藤,打左插入,你會留下藤蔓,但沒有任何意義(恕我直言)。
通常,平衡二叉樹是插入好的分佈值(因此是混洗)的結果。例如,插入10,7,9,12,6

enter image description here

如果插入有序集合,你會做的藤蔓。對於實施例3,4,6,7,9,10,11,12,14

enter image description here

另外,還可以製造類似

enter image description here

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

+0

你對圖表很有趣! – 2014-09-02 16:20:08

+2

我有一個二叉樹的所有情況下的大圖,必須削減它的不同的問題 – 2014-09-02 16:23:32

+0

@IvanIvanov,真的嗎?那麼什麼是二進制搜索樹?一個出列? AFAIK二叉樹沒有順序。 – CodeYogi 2015-10-21 06:50:52