题目链接:https://leetcode-cn.com/problems/insert-into-a-binary-search-tree/
思路:插入的节点永远要插在叶子节点或者度为1的节点后面,关键就是要找到父结点看插在谁的后面,找到以后根据大小判断左右就好。 寻找父结点时,找到有位置放val的父结点即可,可以是叶子节点,也可以是val插入的地方正好是空的节点。
package 二叉搜索树;
/**
* https://leetcode-cn.com/problems/insert-into-a-binary-search-tree/
* @author zxdn
*
*/
class Solution {
public TreeNode findParent(TreeNode root, int val) {
TreeNode node = root;
while(node.right !=null || node.left != null) {
//往右
if( val > node.val) {
//再往右为空说明就插在这里
if(node.right == null) {
return node;
}else {//不空说明还得往下走
node = node.right;
}
}//往左
else {
if(node.left == null) {
return node;
}else {
node = node.left;
}
}
}
//父结点是叶子节点
return node;
}
public TreeNode insertIntoBST(TreeNode root, int val) {
if(root == null) {
root = new TreeNode(val);
}else {
TreeNode parent = findParent(root, val);
if(val > parent.val) {
parent.right = new TreeNode(val);
}else {
parent.left = new TreeNode(val);
}
}
return root;
}
}