为了满足题目的要求,我们可以选择在叶子节点之后添加节点,这样既可以满足题目要求,也不会破坏二叉搜索树的结构。在二叉搜索树中递归的时候,要根据大小,选择进行左递归还是右递归。当递归到空节点的时候,我们就可以添加节点了。同时,递归函数的返回值要用变量接收。这里的返回值为指针,我们采取链表的连接方式接收返回值,相当于将子树加入到该二叉搜索树中。这是大致思路,大家可以结合我下面的代码及注释理解此题。
代码及注释如下:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
TreeNode* insertIntoBST(TreeNode* root, int val) {
//终止条件:遍历到空节点时添加新的节点,同时将该节点返回
if(root == NULL){
TreeNode* newNode = new TreeNode(val);
return newNode;
}
//根据二叉搜索树的性质,通过比较节点大小来判断是左右递归中的哪一种递归方式
if(val < root -> val){
root -> left = insertIntoBST(root -> left,val);//用链表连接的方式接收返回值
}
if(val > root -> val){
root -> right = insertIntoBST(root -> right,val);
}
return root;//返回子树的父节点,并且是从下往上返回
}
};