1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| class Solution { public: void insert(TreeNode* root, int val) { int cur = root->val; if (root->left == nullptr && root->right == nullptr) { TreeNode* node = new TreeNode(val); val < cur ? root->left = node : root->right = node; } else if (root->left == nullptr && val < cur) { TreeNode* node = new TreeNode(val); root->left = node; } else if (root->right == nullptr && val > cur) { TreeNode* node = new TreeNode(val); root->right = node; } else { val < cur ? insert(root->left, val) : insert(root->right, val); } } TreeNode* insertIntoBST(TreeNode* root, int val) { if (root == nullptr) { root = new TreeNode(val); } else { insert(root, val); } return root; } };
|
我们插入元素,不需要考虑调整,插入的时候就插在最后面就可以,考虑到下面三种可以插入的情况:
- 如果当前节点有左右孩子,那就必然是不能插入,也必然进入递归中,即 else 语句
- 如果当前节点没有左右孩子,那是必然可以插入,只需要把目标值和当前值进行比较之后,选择插入左边还是右边
- 如果当前节点右节点可插入,且目标值大于当前值,则确认可以插入到右边
- 如果当前节点左节点可插入,且目标值小于当前值,则确认可以插入到左边
最后就是一个特殊情况,即 为空树,对于这种就直接把待插入的 val 加入到空树中作为 root 节点。