在计算机科学中,树是一种重要的非线性数据结构。
二叉树的删除操作 第一种方法(1)
#include "head.h"
2
3 tp delete_node(tp root,int key)
4 {
5 int pos;
6 tp parent=NULL,child=NULL,point=NULL;
7 parent=btree_search(root,key,&pos);
8 if(parent==NULL)
9 return root;
10 else
11 {
12 switch(pos)
13 {
14 case -1:point=parent->left;break;
15 case 0:point=parent;break;
16 case 1:point=parent->right;break;
17 }
18 if(point->left==NULL && point->right==NULL)
19 {
20 switch(pos)
21 {
22 case -1:parent->left=NULL;break;
23 case 1:parent->right=NULL;break;
24 case 0:parent=NULL;break;
25 }
26 return root;
27
28 }
29 if(point->left==NULL&&point->right!=NULL)
30 {
31 if(parent==point)
32 root=root->right;
33 else
34 parent->right=point->right;
35 free(point);
36 return root;
37 }
38 if(point->left!=NULL&&point->right==NULL)
39 {
40 if(parent==point)
41 root=root->left;
42 else
43 parent->left=point->left;
44 free(point);
45 return root;
46 }
47 if(parent->left!=NULL&&parent->right!=NULL)
48 {
49 parent=point;
50 child=parent->left;
51 while(child->right!=NULL)
52 {
53 parent=child;
54 child=child->right;
55 }
56 }
57 point->key=child->key;
58 if(parent->left==child)
59 parent->left=child->left;
60 else
61 parent->right=child->right;
62 free(child);
63 return root;
64
65 }
66 }