a heap is a binary tree in which the root is bigger then both its sons.
i need to write a function which gets a node and a root of the heap where this node is located in the bottom level.
i need to switch this nodes value with the roots and delete it
and then rearrange the tree so ill get a heap again.
the diagram is in this link
i tried to implement it here
but i dont know why i get all these errors??
Code:#define false 0 #define true 1 typedef struct TreeNode { struct TreeNode *father; struct TreeNode *left; struct TreeNode *right; double val; }TreeNode; TreeNode * maxson(TreeNode * root); void swap(TreeNode * root,TreeNode * node); double deletemax(treenode **heap,treenode *leaf); TreeNode * maxson(TreeNode * root); void arrange(TreeNode ** root); int main() { TreeNode* root; double t; root=(TreeNode*)malloc(sizeof(TreeNode)); root->val=9; root->right=(TreeNode*)malloc(sizeof(TreeNode)); root->right->val=4; root->right->left=NULL; root->right->right=NULL; root->right->father=root; root->left=(TreeNode*)malloc(sizeof(TreeNode)); root->left->val=8; root->left->left=(TreeNode*)malloc(sizeof(TreeNode)); root->left->left->val=7; root->left->right=(TreeNode*)malloc(sizeof(TreeNode)); root->left->right->val=6; root->left->right->father=root->left; root->left->left->father=root->left; root->left->right->right=NULL; root->left->right->left=NULL; root->left->left->right=NULL; root->left->left->left=NULL; t=deletemax(&heap,root->left->right); return 0; } double deletemax(treenode **heap,treenode *leaf)//i have to use this signature { double temp=*heap->val; swap(*heep,leaf); free(leaf); arrange(heap); return temp; } void swap(TreeNode * root,TreeNode * node) { double temp; temp=root->val; root->val=node->val; root->val=temp; } TreeNode * maxson(TreeNode * root) { if (root->left>root->right) { return root->left; } else { return root->right; } } void arrange(TreeNode ** root) { treenode* temp; temp=maxson(*root); if ((*root->left==NULL)&&(*root->right==NULL)) { return; } if (temp->val>*root->val) { swap(*root,node); } arrange(&(root->left)); arrange(&(root->right)); }



LinkBack URL
About LinkBacks



