二叉树搜索树结点的定义
struct BstNode
{
int data;
BstNode * left;
BstNode * right;
BstNode(int val)//此处我用到了构造函数
{
this->data = val;
this->left = nullptr;
this->right = nullptr;
}
};
在堆中创建一个结点(在堆中分配的内存,需要程序员手动释放,或者等程序结束由操作系统自动回收)
BstNode * GetNewNode(int val)
{
BstNode * NewNode = new BstNode(val);
return NewNode;
}
在二叉搜索树中插入一个结点,并返回根结点地址,此处不止一种方法
BstNode * Insert(BstNode * root, int val)
{
if(!root)
{
root = GetNewNode(val);
}
else if(val <= root->data)
{
root->left = Insert(root->left, val);
}
else
{
root->right = Insert(root->right, val);
}
return root;
}
在二叉搜索树中搜索一个结点
bool Searchdata(BstNode * root, int val)
{
if(!root)
{
return false;
}
else if(val == root->data)
{
return true;
}
else if(val <= root->data)
{
return Searchdata(root->left, val);
}
else
{
return Searchdata(root->right, val);
}
}
测试:
int main()
{
BstNode * root = nullptr;
root = Insert(root, 10);
root = Insert(root, 5);
root = Insert(root, 12);
root = Insert(root, 4);
root = Insert(root, 8);
if(Searchdata(root, 8))
cout << "Yes" << endl;
else
cout << "No" << endl;
return 0;
}
总结:
二叉搜索结点上值的特点:左子树所有结点的值都小于等于根结点的值,右子树所有结点的值都大于根结点的值
插入和搜索用的都是递归方法。递归:直接或者间接调用自己本身所处的函数