给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据保证,新值和原始二叉搜索树中的任意节点值都不同。
注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回任意有效的结果。
例如,
1 2 3 4 5 6 7 8 9
| 给定二叉搜索树:
4 / \ 2 7 / \ 1 3
和 插入的值: 5
|
你可以返回这个二叉搜索树:
1 2 3 4 5
| 4 / \ 2 7 / \ / 1 3 5
|
或者这个树也是有效的:
1 2 3 4 5 6 7
| 5 / \ 2 7 / \ 1 3 \ 4
|
提示:
- 给定的树上的节点数介于
0
和 10^4
之间
- 每个节点都有一个唯一整数值,取值范围从
0
到 10^8
-10^8 <= val <= 10^8
- 新值和原始二叉搜索树中的任意节点值都不同
我们把要插入的结点和根结点的值比较:
- 比根节点值大,如果根节点右子结点为空,直接将其插入到根节点的右子结点;如果根节点右子结点不为空,将根节点右子结点设为根节点,重复执行上述操作。
- 比根节点值小,如果根节点左子结点为空,直接将其插入到根节点的左子结点;如果根节点左子结点不为空,将根节点左子结点设为根节点,重复执行上述操作。
方法一:递归
1 2 3 4 5 6 7 8 9 10 11 12 13
| class Solution { public TreeNode insertIntoBST(TreeNode root, int val) { if(root == null){ return new TreeNode(val); } if(val > root.val){ root.right = insertIntoBST(root.right, val); }else{ root.left = insertIntoBST(root.left, val); } return root; } }
|
方法二:迭代
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| class Solution { public TreeNode insertIntoBST(TreeNode root, int val) { if(root == null){ return new TreeNode(val); } TreeNode pos = root; while(pos != null){ if(val > pos.val){ if(pos.right == null){ pos.right = new TreeNode(val); break; }else{ pos = pos.right; } }else{ if(pos.left == null){ pos.left = new TreeNode(val); break; }else{ pos = pos.left; } } } return root; } }
|