在這個程序中,用戶應該能夠從輸入整數序列創建一個任意的二叉樹,他們應該能夠選擇到balanced
,left_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);
}
如何調整此代碼?
你的代碼中沒有任何東西可以平衡你的樹;樹的平衡(或不平衡)完全由節點呈現插入樹中的順序來控制。 – 2014-09-02 16:20:58
我有平衡的代碼。我使用了不包括在這裏的DSW平衡算法。 – user2750830 2014-09-03 03:54:55