Untitled
#include <stdio.h> struct BinarySerchTreeNode{ int data; struct BinarySerchTreeNode* left; //left child struct BinarySerchTreeNode* right; //right child }; struct BinarySerchTreeNode* addData(int data){ struct BinarySerchTreeNode* node = malloc(sizeof(struct BinarySerchTreeNode)); node->data = data; node->left = NULL; node->right = NULL; return node; }; struct BinarySerchTreeNode* makeTree(){ struct BinarySerchTreeNode* root = addData(6); struct BinarySerchTreeNode* rootLeft = addData(2); struct BinarySerchTreeNode* rootRight = addData(8); root->left = rootLeft; root->right = rootRight; struct BinarySerchTreeNode* rootLeftLeft = addData(1); struct BinarySerchTreeNode* rootRightRight = addData(4); rootLeft->left = rootLeftLeft; rootLeft->right = rootRightRight; struct BinarySerchTreeNode* rootLeftLeftLeft = addData(3); rootRightRight->left = rootLeftLeftLeft; return root; } struct BinarySerchTreeNode* findMin(struct BinarySerchTreeNode* node){ if(node == NULL){ return NULL; } else if(node->left == NULL){ return (node); } else { return(findMin(node->left)); } } struct BinarySerchTreeNode* deleteN(int data, struct BinarySerchTreeNode* node){ struct BinarySerchTreeNode* deleteStore; struct BinarySerchTreeNode* child; if(node == NULL){ } else if(data < node->data){ node->left = deleteN(data,node->left); } else if(data > node->data){ node->right = deleteN(data,node->right); } else if(node->left && node->right){ deleteStore = findMin(node->right); node->data = deleteStore->data; node->right = deleteN(node->data,node->right); } else{ deleteStore = node; if(node->left == NULL){ child = node->right; } else if(node->right == NULL){ child = node->left; } free(deleteStore); return child; } return node; } int main(){ struct BinarySerchTreeNode* root = makeTree(); deleteN(3,root); inOrderTraversal(root); return 0; } void inOrderTraversal(struct BinarySerchTreeNode* node){ if(node == NULL) return; inOrderTraversal(node->left); printf("%d ", node->data); inOrderTraversal(node->right); }
Leave a Comment