一、题目
二、代码
/**
* 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:
void recursion_for_insert(TreeNode* process_node, int before_num, int after_num, TreeNode*& insert_node,int & stop_flag)
{
if(process_node->left) recursion_for_insert(process_node->left, before_num, after_num, insert_node,stop_flag);
//处理代码
if(stop_flag==1) return;
if(process_node->val==before_num&&process_node->right==nullptr)
{
process_node->right=insert_node;
stop_flag=1;
}
if(process_node->val==after_num&&process_node->left==nullptr)
{
process_node->left=insert_node;
stop_flag=1;
}
if(process_node->right) recursion_for_insert(process_node->right, before_num, after_num, insert_node,stop_flag);
}
//二叉搜索树 中序遍历就是有序数组
void recursion(TreeNode* process_node, vector<int>& save_vector)
{
if(process_node==nullptr) return;
if(process_node->left) recursion(process_node->left,save_vector);
save_vector.push_back(process_node->val);
if(process_node->right) recursion(process_node->right,save_vector);
}
TreeNode* insertIntoBST(TreeNode* root, int val)
{
int i,j;
int before_num;
int after_num;
vector<int> save_vector;
TreeNode* insert_node=new TreeNode(val);
TreeNode* temp_node;
int stop_flag=0;
if(root==nullptr)
{
root=insert_node;
}
else
{
recursion(root,save_vector);//获得从小到大 有序的数值
for(i=0;i<save_vector.size();i++) std::cout<<" "<<save_vector[i];
std::cout<<std::endl;
if(val<save_vector[0]) // 比最小的都要小
{
temp_node=root;
while(temp_node->left!=nullptr) temp_node=temp_node->left;
temp_node->left=insert_node;
}
else if(val>save_vector[save_vector.size()-1]) //比最大的都要大
{
temp_node=root;
while(temp_node->right!=nullptr) temp_node=temp_node->right;
temp_node->right=insert_node;
}
else //居中
{
for(i=1;i<save_vector.size();i++)
{
if(save_vector[i-1]<val&&save_vector[i]>val)
{
before_num=save_vector[i-1];
after_num=save_vector[i];
std::cout<<" before_num "<<before_num<<std::endl;
std::cout<<" after_num "<<after_num<<std::endl;
break;
}
}
recursion_for_insert(root, before_num, after_num, insert_node,stop_flag); //插入函数
}
}
return root;
}
};