插入一个数,就是先找到插入位置,然后进行插入操作。
思路:递归
递归函数声明:
TreeNode* insertIntoBST(TreeNode* root, int val);
递归出口:
如果根节点不为空,val < root->val且root左子树为空,val建立节点插入到根节点的左子树
如果根节点不为空,val > root->val且root右子树为空,val建立节点插入到根节点的右子树
如果根节点为空,返回以val值的节点
递归体:
如果root->val小于val,val插入到左子树
如果root->val大于val,val插入到右子树
/**
* 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 *node=new TreeNode(val);
return node;
}
if(!root->left&&val<root->val)
{
TreeNode *node=new TreeNode(val);
root->left=node;
return root;
}
if(!root->right&&val>root->val)
{
TreeNode *node=new TreeNode(val);
root->right=node;
return root;
}
if(root->val>val)
{
TreeNode *node=insertIntoBST(root->left,val);
root->left=node;
return root;
}
else
{
TreeNode *node=insertIntoBST(root->right,val);
root->right=node;
return root;
}
}
};