LeetCode二叉搜索树中的插入操作
这道题目主要是做二叉搜索树的插值操作,说到二叉搜索树,最大的特点就是整个树中,每个节点的左子树的值都比自己的值要小,所有右子树中的值都比自己要大,所以二叉搜索树在查找方面有着独到的优势,这道题目是对二叉搜索树插入一个指定的值,然后返回插值之后的搜索二叉树:
这道题大体的思路是:因为这是搜索二叉树,我们可以先通过搜索二叉树的特性找到数值插入的位置,然后对值进行插入操作,我们先来看看代码,然后再做分析:
/**
* 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) {
TreeNode newNode = new TreeNode(val);
TreeNode p = root;
TreeNode pp = root;
boolean isLeft = true;
//寻找插值的位置
while (p != null) {
pp = p;
if (p.val > val) {
p = p.left;
isLeft = true;
} else if (p.val <= val) {
p = p.right;
isLeft = false;
}
}
//插值操作
if (isLeft) {
pp.left = newNode;
} else {
pp.right = newNode;
}
return root;
}
}
首先我们要定义一个节点,把要插入的值赋给这个节点,然后我们就开始找节点应该插入的位置,首先我们初始化两个我们根节点的引用p和pp,然后我们进行值的比较,如果要插入的值小于节点的值,那么我们应该把这个值插在这个节点左子树中,否则我们应该把这个值插在右子树中,每次查找完成,我们就把p节点赋给pp,直到迭代完成,其中还有个布尔型的变量用于记录最终插入位置是在节点的左子树还是右子树中,最后我们把我们新建的节点放在我们pp的左子树或者右子树中,因为pp是对root的引用,所以我们最后返回root就可以了。希望这篇文章能对大家对二叉搜索树的理解有所帮助,谢谢。