二叉树增删改查java_java--二叉树增删改查详解

本文详细介绍了如何在Java中实现二叉树的删除和修改操作。删除结点时,根据结点是否有左右孩子进行不同处理,确保不破坏二叉排序树的性质。插入结点时,需找到合适的位置并更新相关连接。更新操作通过删除旧结点后再插入新结点完成。附带相关代码示例。
摘要由CSDN通过智能技术生成

二叉树的删除和修改

二叉树的删除比较复杂。你要先找到要删除的结点。要删除的结点对象并不一定要删除。因为通过函数调用得到的只是他的副本。并不会真正的把他删掉。你只要让他不在树上就ok了。让删除结点的父节点,左右孩子结点用新的结点来指向就把该结点从树上删除了。

然后找到要插入的结点。

找法有三种情况:删除结点有左孩子

这种情况下,找到左孩子的最右孩子。找到的结点是要上去的结点。如果该左孩子没有右孩子,则该左孩子是要上去的结点。

删除结点没有左孩子,有右孩子

要上去的结点是最右孩子。

删除结点没有孩子(叶节点)

这种情况直接让指向他的父结点指向空就行了,就把他从树上删除了。

注意事项:

原来删除结点的左右孩子结点和父结点不用管,只要把该插入结点的值给删除结点就行了,同时你还要把上去的结点的孩子结点处理一下。以便不影响后续操作。

虽然说得有些绕,不过其实也没什么东西。就是把插入结点的值给删除节点。然后做一下交接,不能影响后续的操作,也不要破坏二叉排序树的性质就行了。建议在纸上画一个排序树,然后试着删除一个结点,看看怎么处理上去的结点。

下面看代码:public void Delete(Tree root,int value) {

Tree temp=new Tree();

temp=Select(root, value);

if(temp.value==0) {

System.out.println("你要删除的数值"+value+"不存在");

}

else {

Tree p=new Tree();

Tree node=new Tree();

Tree parent=new Tree();

p=p.Select(root, value);//p是要删除的结点

node=p;

if(p!=null) {

if(p.left!=null) {

p=node.left;

while(p.right!=null) {

p=p.right;

}

node.value=p.value;

if(node.left.right==null) {

node.left=p.left;

}

else{

p.parent.right=p.left;

}

}

else if(p.right!=null)

{

p=p.right;

node.value=p.value;

node.left=p.left;

node.right=p.right;

}

else {

if(p.equals(p.parent.left))

{

p.parent.left=null;

}

if(p.equals(p.parent.right))

{

p.parent.right=null;

}

}System.out.println("");

System.out.println("数据"+value+"删除成功");

}

}

}System.out.println("树初始化序列为:");

init.Bst(tree[0]);

init.Delete(tree[0], 18);

init.Bst(tree[0]);

System.out.println("");

init.Delete(tree[0], 88);

init.Bst(tree[0]);

961更新操作比较简单:

调用select和delete和insert函数就可以

先把他从树上删除,然后再insert到树上public void Update(Tree root,int value,int update) {

Tree temp=new Tree();

temp=temp.Select(root, value);

if(temp.value==value) {

Delete(root,value);

Tree a= new Tree(update);

insert(root,a);

System.out.println("数据"+value+"成功更新成"+update);

}

else {

System.out.println("数据"+value+"更新失败");

}

}

961

好的,下面是二叉树增删改查的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、付费专栏及课程。

余额充值