二叉搜索树插入算法的文字描述:
-
若二叉搜索树为空树,直接插入结点,使之成为根节点
-
若二叉搜索树非空:
- 若val < root->val 插入左子树(可以为空树)
- 若val > root->val 插入右子树(可以为空树)
算法的关键是以二叉搜索树的特性为依据,找到被插入的子树,使插入后形成的二叉树依旧是二叉搜索树。
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) {}
};
bool insertIntoBST(TreeNode *&root,int val) {
TreeNode **node = &root;
while (*node)
if (val == (*node)->val) return false;
else node = val < (*node)->val ?
&((*node)->left) : &((*node)->right);
(*node) = new TreeNode(val);
return true;
}
bool insertIntoBST(TreeNode *&root,int val) {
if (!root) return root = new TreeNode(val),true;
if (val == root->val) return false;
else return insertIntoBST(val < root->val ?
root->left : root->right,val);
}