首页 > 代码库 > 手写BST插入查找删除
手写BST插入查找删除
binary search\sort\find tree operations
status InsertNode(Node* root, data x, Node* father) { if(root==NULL) { if(father==NULL) Tree empty; else { if(x<father->data) { father->left=new Node//inital left right NULL father->left->data=http://www.mamicode.com/x;>后来发现,根本不需要father, 会出现上面的原因是我总以为指针为空,指针变量也不能在赋值了。有个错误理解,指针变量是一个变量,他的值为空,现在可以让他指向其他的地方,例如申请一个堆空间,他的值就是这个新的空间的地址值。
status InsertNode(Node* root, data x) { if(root==NULL) { root=new Node;//assume initial left right NULL root->data=http://www.mamicode.com/x;>Node* FindNode(Node* root, data x, Node* father)//use father for delete recall { if(root==NULL) return NULL; if(x<root->data) FindNode(root->left, x,root); else if(root0>data<x) FindNode(root->right,x,root); else return root; }status DeleteNode(Node* root, data x) { Node* parent=NULL; Node* p=FindNode(root,x,parent); if(p==NULL) return failure, can not found x; if(parent==NULL)//BST only has a root return success root==NULL;//set BST as NULL if(p==parent->left) { if(p-left!=NULL) { move p's right child as p's leftchild's rightdownmost node's right child parent->left=p->left; } else if(p->right!=NULL) { move p's left child as p's rightchild's leftdownmost node's left child; parent->left=p->right; } else// all null { parent->left==NULL; } delete p; } if(p==parent->right) { follow left part; } return sucess; }
总结指针bug就是 每次访问left right,都要考虑是否p为空,如果有空就另外处理,否则NULL访问left right 程序就crash了。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。