给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。
    输入数据保证 ,新值和原始二叉搜索树中的任意节点值都不同。
    注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。

    示例 1:
    输入:root = [4,2,7,1,3], val = 5
    输出:[4,2,7,1,3,5]
    解释:另一个满足题目要求可以通过的树是:

    示例 2:
    输入:root = [40,20,60,10,30,50,70], val = 25
    输出:[40,20,60,10,30,50,70,null,null,25]

    示例 3:
    输入:root = [4,2,7,1,3,null,null,null,null,null,null], val = 5
    输出:[4,2,7,1,3,5]

    二叉搜索树特点:
    1)左子树所有的节点值都比根节点的值小
    2)右子树所有的节点值都比根节点的值大

    若要插入一个新的节点,则需要先找到需要插入的位置:
    1)如果值比当前节点值小,则继续往左子树找
    2)如果值比当前节点值大,则继续往右子树找
    3)如果树为空,则表示已经找到位置

    而要搜索一棵二叉搜索树,可以利用二叉搜索树特点通过二分查找进行查找:

    1. /**
    2. * 二叉搜索树的搜索
    3. *
    4. * @param root
    5. * @param target
    6. * @return
    7. */
    8. public TreeNode searchBST(TreeNode root, int target) {
    9. if (root == null) {
    10. return null;
    11. }
    12. // 去左子树搜索
    13. if (target < root.val) {
    14. return searchBST(root.left, target);
    15. }
    16. // 去右子树搜索
    17. if (target > root.val) {
    18. return searchBST(root.right, target);
    19. }
    20. // 返回目标节点
    21. return root;
    22. }

    �那么如果需要插入一个节点,则可先找到位置,然后创建一个新的树

    1. public TreeNode insertIntoBST(TreeNode root, int val) {
    2. if (root == null) {
    3. // 表示子树为空,已经找到位,作为新的子树
    4. return new TreeNode(val);
    5. }
    6. if (val < root.val) {
    7. // 去左子树找
    8. root.left = insertIntoBST(root.left, val);
    9. }
    10. if (val > root.val) {
    11. // 去右子树找
    12. root.right = insertIntoBST(root.right, val);
    13. }
    14. // 返回树
    15. return root;
    16. }