二叉排序树的删除

#include "stdafx.h"
#include<cstdio>
#include<iostream>
#include<vector>
#include<stack>
#include<queue>

using namespace std;
const int maxn=100;
const int inf=0x7fffffff;
struct node{
	int data;
	node *l,*r;};

	node* findmax(node* root)
	{
		while(root->r!=NULL)
			root=root->r;
		return root;


	}
	node *findmin(node* root){
		while(root->l!=NULL)root=root->l;
		return root;


	}

	void deletenode(node* &root,int x){
		if(root==NULL)return ;
		if(root->data==x){
			if(root->l==NULL&&root->r==NULL)root=NULL;
			else if(root->l!=NULL){
				node* pre=findmax(root->l);
				root->data=pre->data;
				deletenode(root->l,pre->data);

			}
			else {
				node* pre=findmin(root->r);
				root->data=pre->data;
				deletenode(root->r,pre->data);


			}	





		}
		else if(root->data>x)deletenode(root->l,x);
		else deletenode(root->r,x);




	}



好的,我来为您解答如何实现二叉排序树的查找。 1. 定义二叉排序树的查找算法 二叉排序树的查找算法可以使用递归或迭代方式实现,以下是一个递归实现的示例代码: ```python def search_bst(root, val): if not root or root.val == val: return root elif root.val > val: return search_bst(root.left, val) else: return search_bst(root.right, val) ``` 2. 二叉排序树的插入算法 二叉排序树的插入算法也可以使用递归或迭代方式实现,以下是一个递归实现的示例代码: ```python def insert_bst(root, val): if not root: return TreeNode(val) elif root.val > val: root.left = insert_bst(root.left, val) else: root.right = insert_bst(root.right, val) return root ``` 3. 建立二叉排序树的插入算法 建立二叉排序树的插入算法可以使用一个循环来不断插入新的节点,以下是一个示例代码: ```python def build_bst(nums): if not nums: return None root = TreeNode(nums[0]) for i in range(1, len(nums)): insert_bst(root, nums[i]) return root ``` 4. 二叉排序树删除一个结点的操作实现 二叉排序树删除一个结点的操作需要考虑多情况,包括删除的节点有无子节点、删除的节点只有一个子节点、删除的节点有两个子节点等,以下是一个示例代码: ```python def delete_bst(root, val): if not root: return None if root.val == val: if not root.left: return root.right if not root.right: return root.left if root.left and root.right: temp = root.right while temp.left: temp = temp.left root.val = temp.val root.right = delete_bst(root.right, temp.val) elif root.val > val: root.left = delete_bst(root.left, val) else: root.right = delete_bst(root.right, val) return root ``` 5. 打印二叉排序树 二叉排序树的打印可以使用中序遍历来实现,以下是一个示例代码: ```python def inorder_traversal(root): if not root: return [] res = [] stack = [] while root or stack: while root: stack.append(root) root = root.left root = stack.pop() res.append(root.val) root = root.right return res ``` 可以使用以上函来打印二叉排序树的所有节点值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值