701. 二叉搜索树中的插入操作
题意:给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。
注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。
解题思路
解法1:
1.遍历root,遍历过程中,需要找到val可以插入的点,所以需要判断条件p.val < val
,如果小于等于,则在左子树继续寻找空节点,如果大于,则在右子树继续寻找空节点
2.找到空节点,每次遍历,pre保存遍历到的节点的上一节点
3.此时p为空,但是pre是发现的空节点的父节点
4.将val插入到pre的左子树(pre.val >= val
)或者右子树(pre.val < val
)
解题遇到的问题
无
后续需要总结学习的知识点
需要深入总结学习二叉搜索树的数据结构的特点、应用、搜索、插入、删除
##解法1
class Solution {
public TreeNode insertIntoBST(TreeNode root, int val) {
if (root == null) {
return new TreeNode(val);
}
TreeNode preNode = root, p = root;
// 遍历root,找到空节点
while (p != null) {
// 每次遍历,保存遍历到的节点的上一节点
preNode = p;
p = p.val < val ? p.right : p.left;
}
// 此时p为空,但是pre是发现的空节点的父节点
if (preNode.val < val) {
preNode.right = new TreeNode(val);
} else {
preNode.left = new TreeNode(val);
}
return root;
}
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {
}
TreeNode(int val) {
this.val = val;
}
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
}
网友评论