原题链接:https://leetcode.com/problems/insert-into-a-binary-search-tree/
1. 题目介绍
Given the root node of a binary search tree (BST) and a value to be inserted into the tree, insert the value into the BST. Return the root node of the BST after the insertion. It is guaranteed that the new value does not exist in the original BST.
Note that there may exist multiple valid ways for the insertion, as long as the tree remains a BST after insertion. You can return any of them.
给出一个二叉搜索树,以及一个值,要把这个值插入二叉搜索树。返回插入值之后的新树。题目保证要插入的值,在原来的二叉搜索树中不存在。
需要注意的是,也许存在多种有效的插入方式,只要新树仍然是一棵二叉搜索树就行。如果有多种插入方式,你可以返回任意一种。
一棵树是二叉搜索树,意味着该树上每一个节点上的值,都要大于所有的左子树上的节点,小于所有右子树上的节点。
For example,
You can return this binary search tree:
需要返回新的二叉搜索树:
This tree is also valid:
还有一种插入的方式也可以:
2. 解题思路
根据二叉搜索树的性质,本题可以使用递归进行解决。
由于题目保证要插入的值不在树中,因此所有节点只有两种情况,大于要插入的值,或者小于要插入的值。
每次递归分析一个节点时,如果当前节点的值大于要插入的值,那么就递归分析左子树,否则递归分析右子树。当节点为空时,就可以把要插入的值放入了。
每个递归函数都返回已经插入完毕的子树。
实现代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode insertIntoBST(TreeNode root, int val) {
if(root == null){
return new TreeNode(val);
}
if(root.val > val){
root.left = insertIntoBST(root.left , val);
}else{
root.right = insertIntoBST(root.right, val);
}
return root;
}
}