插入算法流程图
![在这里插入图片描述](https://img-blog.csdnimg.cn/59248eabc9cf4f5ca459086ade925cf2.png)
创建二叉搜索树节点
TreeNode* CreateBnarySearchTreeNode(const TreeKey &value, TreeNode* Where=nullptr) {
TreeNode* newTreeNode = new TreeNode{ value, Where, Where };
return newTreeNode;
}
TreeNode* newTreeNode = CreateBnarySearchTreeNode(value);
判断根节点为空?
const bool isRootNodeEmpty = tree.Root;
if (!isRootNodeEmpty){
tree.Root = newTreeNode;
}
循环找到插入的结点
if(isRootNodeEmpty){
TreeNode* InsertNode= nullptr;
while (currentNode) {
InsertNode = currentNode;
if (currentNode->value< newTreeNode->value) {
currentNode = currentNode->LeftChild;
}else{
currentNode = currentNode->RightChild;
}
}
}
判断插入到孩子节点
const bool isLertInsert = InsertNode->value < newTreeNode->value;
if (isLertInsert){
InsertNode->LeftChild = newTreeNode;
}else{
InsertNode->RightChild = newTreeNode;
}
}
二叉搜索树节点个数增一
++tree.size;
插入算法分析
插入元素:1
![在这里插入图片描述](https://img-blog.csdnimg.cn/6115c4f7e8964df49670c74ea8d0a549.png)
插入元素:9
![在这里插入图片描述](https://img-blog.csdnimg.cn/5e1c3f6dec8748f5a5a55695671ae5a0.png)
插入元素:8
![在这里插入图片描述](https://img-blog.csdnimg.cn/1e02915098e5416881e1b2af715ef41f.png)
插入元素:6
![在这里插入图片描述](https://img-blog.csdnimg.cn/ab4ebec5d303447d958e8b62d3c059ea.png)
完全插入效果展示:
![在这里插入图片描述](https://img-blog.csdnimg.cn/d289acc06ab74da68cb70962bec63f55.png)
插入算法-完整版
void BinarySearchTree_Insert(BinarySearchTree & tree, const TreeKey & value) {
TreeNode* newTreeNode = CreateBnarySearchTreeNode(value);
const bool isRootNodeEmpty = tree.Root;
if (!isRootNodeEmpty) {
tree.Root = newTreeNode;
}
TreeNode* currentNode = tree.Root;
if (isRootNodeEmpty) {
TreeNode* InsertNode = nullptr;
while (currentNode) {
InsertNode = currentNode;
if (newTreeNode->value < currentNode->value) {
currentNode = currentNode->LeftChild;
}
else {
currentNode = currentNode->RightChild;
}
}
const bool isLertInsert = newTreeNode->value < InsertNode->value;
if (isLertInsert) {
InsertNode->LeftChild = newTreeNode;
}
else {
InsertNode->RightChild = newTreeNode;
}
}
++tree.size;
}