# 701. Insert into a Binary Search Tree

 **<font color=red>难度: Medium</font>**

 ## 刷题内容

 > 原题连接

* https://leetcode-cn.com/problems/insert-into-a-binary-search-tree/
  
 > 内容描述
 
 ```
给定二叉搜索树（BST）的根节点和要插入树中的值，将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 保证原始二叉搜索树中不存在新值。

注意，可能存在多种有效的插入方式，只要树在插入后仍保持为二叉搜索树即可。 你可以返回任意有效的结果。

例如, 

给定二叉搜索树:

        4
       / \
      2   7
     / \
    1   3

和 插入的值: 5
你可以返回这个二叉搜索树:

         4
       /   \
      2     7
     / \   /
    1   3 5
或者这个树也是有效的:

         5
       /   \
      2     7
     / \   
    1   3
         \
          4
 ```

## 解题方案
> 思路 1
```
二分查找，记录父节点和大小关系
```

```cpp
TreeNode* insertIntoBST(TreeNode* root, int val) {
    TreeNode* pre;
    TreeNode* head = root;
    int side = 0;
    while(root){
        pre = root;
        if(root->val>val){
            root = root->left;
            side = 1;
        }
        else if(root->val<val){
            side = 0;
            root = root->right;
        }
    }
    TreeNode* node = new TreeNode(val);
    if(side==1)
        pre->left = node;
    else
        pre->right = node;
    return head;
}
```