Java 求解二叉搜索树中的插入操作
Posted 南淮北安
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 求解二叉搜索树中的插入操作相关的知识,希望对你有一定的参考价值。
一、题目
给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。
注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。
二、迭代法
该题可以利用二叉搜索树的特性,找到要插入的节点,插入即可
搜索过程中,需要前驱节点记录要插入的位置
class Solution {
public TreeNode insertIntoBST(TreeNode root, int val) {
//当前节点为空,直接返回新插入的节点为根节点
if (root == null) {
return new TreeNode(val);
}
TreeNode cur = root;
//需要前驱节点记录要插入的位置
TreeNode pre = root;
while (cur != null) {
pre = cur;
//左子树查找
if (cur.val > val) {
cur = cur.left;
} else {//右子树查找
cur = cur.right;
}
}
//根据前驱确定要插入的位置
if (pre.val > val) {
pre.left = new TreeNode(val);
} else {
pre.right = new TreeNode(val);
}
return root;
}
}
三、递归法
(1)确定递归参数及返回值
(2)确定递归终止条件
终止条件就是找到遍历的节点为null的时候,就是要插入节点的位置了,并把插入的节点返回。
if (root == null) {
return new TreeNode(val);
}
(3)确定单层递归逻辑
不需要遍历整个树,根据比较当前节点值和目标值的关系,遍历一条边即可
if (root.val > val) {
root.left = insertIntoBST(root.left, val);
}
if (root.val < val) {
root.right = insertIntoBST(root.right, val);
}
通过递归函数返回值完成了新加入节点的父子关系赋值操作了,下一层将加入节点返回,本层用root->left或者root->right将其接住
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);
}
if (root.val < val) {
root.right = insertIntoBST(root.right, val);
}
return root;
}
}
四、总结
利用二叉搜索树的特性
注意二叉搜索树的迭代写法
需要搜索单条边的写法
以上是关于Java 求解二叉搜索树中的插入操作的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode Java刷题笔记—701. 二叉搜索树中的插入操作