[英]Creating a right skewed binary tree in C
在这个程序中,用户应该能够从输入整数序列创建任意的二进制树,他们应该能够选择之间进行balanced
, left_only
, right_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.