java二叉树的增删改查原理,二叉树实现增删改查

#include

#include

using namespace std;

//*************************

struct BSTree{

int value;

BSTree* bsLeft;

BSTree* bsRight;

};

//*************************

void printBSTree(BSTree* p);

BSTree* deleteNode(BSTree* p, int value);

int main()

{

int inputNum = 0;

//head pointer is fixed

//p pointer is scanning

BSTree* head = NULL;

BSTree* p = NULL;

//input -1 ends input

//scanf("%d",&inputNum);

cin>>inputNum;

while(inputNum!=-1){

BSTree* temp = new BSTree();

temp->value = inputNum;

temp->bsLeft = NULL;

temp->bsRight = NULL;

if(head == NULL){

head = temp;

}else{

p = head;

while(true){

if(temp->value <

p->value){

if(p->bsLeft == NULL){

p->bsLeft = temp;

break;

}

p = p->bsLeft;

}

if(temp->value >=

p->value){

if(p->bsRight == NULL){

p->bsRight = temp;

break;

}

p = p->bsRight;

}

}

}

cin>>inputNum;

//scanf("%d",&inputNum);

}

//read the BSTree

printBSTree(head);

cout<

cin>>inputNum;

while(inputNum!=-1){

head = deleteNode(head,inputNum);

if(head == NULL){

cout<

null!!";

break;

}

printBSTree(head);

cout<

cin>>inputNum;

}

return 0;

}

void printBSTree(BSTree* p)

{

if(p == NULL)

return;

BSTree* left = p->bsLeft;

BSTree* right = p->bsRight;

printBSTree(left);

printf("%d  ",

p->value);

printBSTree(right);

return;

}

BSTree* deleteNode(BSTree* head, int value)

{

//循环遍历找到该值

BSTree* parent = head;

BSTree* p = head;

while(p != NULL){

if(value < p->value ){

parent = p;

p = p->bsLeft;

}

else if(value > p->value){

parent = p;

p = p->bsRight;

}

else

break;

}

if(p == NULL){

cout<

find!!"<

}

//如果都为空

if(p->bsRight==NULL

&&

p->bsLeft==NULL){

if(p==head){

delete p;

return NULL;

}

if(parent->bsLeft == p)

parent->bsLeft = NULL;

else if(parent->bsRight == p)

parent->bsRight = NULL;

delete p;

}

//如果有右子树

if(p->bsRight!=NULL){

BSTree* temp = p->bsRight;

BSTree* tempParent = p->bsRight;

while(temp->bsLeft!=NULL){

tempParent = temp;

temp = temp->bsLeft;

}

if(parent->bsLeft == p)

parent->bsLeft = temp;

else if(parent->bsRight == p)

parent->bsRight = temp;

if(temp!=tempParent){

tempParent->bsLeft =

temp->bsRight;

temp->bsLeft = p->bsLeft;

temp->bsRight =

p->bsRight;

}else{

temp->bsLeft = p->bsLeft;

}

if(head == p){

delete p;

return temp;

}

delete p;

}

//如果没有右子树

if(p->bsLeft!=NULL

&&

p->bsRight==NULL){

if(parent->bsLeft == p)

parent->bsLeft =

p->bsLeft;

else if(parent->bsRight == p)

parent->bsRight =

p->bsLeft;

if(p == head){

BSTree* temp = p->bsLeft;

delete p;

return temp;

}

delete p;

}

return head;

}

BSTree* searchNode(BSTree* head, int value, int

isParent)

{

BSTree* parent = head;

BSTree* p = head;

while(p != NULL){

if(value < p->value ){

parent = p;

p = p->bsLeft;

}

else if(value > p->value){

parent = p;

p = p->bsRight;

}

else{

if(isParent == 0)

return p;

else

return parent;

}

}

return head;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是二叉树增删改查的C语言代码示例。 首先,我们需要定义二叉树的结构体: ```c struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; }; ``` 接下来,我们分别实现二叉树的增、删、改、查操作: 1. 增加节点 ```c struct TreeNode* insertNode(struct TreeNode* root, int val) { if (!root) { struct TreeNode* node = (struct TreeNode*)malloc(sizeof(struct TreeNode)); node->val = val; node->left = NULL; node->right = NULL; return node; } if (val < root->val) { root->left = insertNode(root->left, val); } else if (val > root->val) { root->right = insertNode(root->right, val); } return root; } ``` 2. 删除节点 ```c struct TreeNode* deleteNode(struct TreeNode* root, int key) { if (!root) { return NULL; } if (root->val == key) { if (!root->left) { struct TreeNode* tmp = root->right; free(root); return tmp; } else if (!root->right) { struct TreeNode* tmp = root->left; free(root); return tmp; } else { struct TreeNode* p = root->right; while (p->left) { p = p->left; } root->val = p->val; root->right = deleteNode(root->right, p->val); } } else if (root->val > key) { root->left = deleteNode(root->left, key); } else { root->right = deleteNode(root->right, key); } return root; } ``` 3. 修改节点 ```c struct TreeNode* modifyNode(struct TreeNode* root, int oldVal, int newVal) { root = deleteNode(root, oldVal); root = insertNode(root, newVal); return root; } ``` 4. 查找节点 ```c struct TreeNode* searchNode(struct TreeNode* root, int val) { if (!root || root->val == val) { return root; } if (root->val > val) { return searchNode(root->left, val); } else { return searchNode(root->right, val); } } ``` 以上就是二叉树增删改查的C语言代码示例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值