使用C语言完成一份模拟实现二叉树上组播密钥的分发、用户加入、用户离开的过程的代码
#include<stdio.h> #include<stdlib.h>
struct node{ struct node* left; struct node* right; int key; };
typedef struct node* Node;
Node createNode(int key){ Node node = (Node)malloc(sizeof(struct node)); node->left = NULL; node->right = NULL; node->key = key; return node; }
void addKey(Node root, int key){ if(root == NULL){ return; } if(key < root->key){ if(root->left == NULL){ root->left = createNode(key); }else{ addKey(root->left, key); } }else if(key > root->key){ if(root->right == NULL){ root->right = createNode(key); }else{ addKey(root->right, key); } } }
void removeKey(Node root, int key){ if(root == NULL){ return; } if(key < root->key){ removeKey(root->left, key); }else if(key > root->key){ removeKey(root->right, key); }else{ if(root->left == NULL && root->right == NULL){ free(root); }else if(root->left == NULL){ Node temp = root; root = root->right; free(temp); }else if(root->right == NULL){ Node temp = root; root = root->left; free(temp); }else{ Node temp = root->right; while(temp->left != NULL){ temp = temp->left; } root->key = temp->key; removeKey(root->right, temp->key); } } }
void printTree(Node root){ if(root == NULL){ return; } printTree(root->left); printf("%d ", root->key); printTree(root->right); }
int main(){ Node root = createNode(10); addKey(root, 8); addKey(root, 15); addKey(root, 5); addKey(root, 12); addKey(root, 18); addKey(root, 13); addKey(root, 11); addKey(root, 14); addKey(root, 17); addKey(root, 20); printf("Initial tree: "); printTree(root); printf("\n");
removeKey(root, 12);
printf("After removing 12: ");
printTree(root);
printf("\n");
removeKey(root, 15);
printf("After removing 15: ");
printTree(root);
printf("\n");
addKey(root, 6);
printf("After adding 6: ");
printTree(root);
printf("\n");
return 0;
原文地址: https://www.cveoy.top/t/topic/emR1 著作权归作者所有。请勿转载和采集!