二叉搜索树(K模型)

本文详细介绍了二叉搜索树的创建过程,包括节点创建、树的构建、插入、中序遍历、查找、删除等操作,重点探讨了非递归和递归实现的方法,并针对删除操作的特殊情况进行了分析。
摘要由CSDN通过智能技术生成


前言


一、二叉搜索树的概述

二、搜索树的创建

1.节点创建

#include <iostream>
using namespace std;

template<class T>
struct BSTNode
{
   
	BSTNode<T>* _left;
	BSTNode<T>* _right;
	T _data;

	BSTNode(const T& data)
	;_left(nulptr)
	,_right(nullptr)
	,_data(data)
	{
   }
}

2. 树的构建

template<class K>
class BSTree
{
   
	typedef BSTreeNode<K> Node;
public:
	BSTree()
		:_root(nullptr)
	{
   }

	//----各类函数-----
	
private:
	Node* _root;	
}

1. 插入(非递归)

bool Insert(const T& data)
{
   
    if (_root == NULL)
    {
   
        _root = new Node(data);
        return true;
    }

    Node* parent = NULL;
    Node* cur = _root;
    while (cur)
    {
   
        if (cur->_data < data)
        {
   
            parent = cur;
            cur = cur->_right;
        }
        else if (cur->_data > data)
        {
   
            parent = cur;
            cur = cur->_left;
            }
        else
        {
   
            return false;
        }
    }
    cur = new Node(data);
    if (parent->_data < data)
    {
   
        parent->_right = cur;
    }
    else
    {
   
        parent->_left = cur;
    }
    return true;
}
  1. 这里有一点需要注意:
    在cur = new Node(data) 后,还需要将其与父节点链接起来。

3. 中序遍历

private:
	void _InOrder(Node* root)
	{
   
		if(root == NULL)
		{
   
			return;
		}
		_InOrder
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值