Last updated on 2023年7月19日 下午
701. 二叉搜索树中的插入操作(递归实现,C++)
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 27 28 29 30 31
| /** * 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->val > val){ root->left = insertIntoBST(root->left, val); }
if(root->val < val){ root->right = insertIntoBST(root->right,val); }
return root; } };
|
701. 二叉搜索树中的插入操作(迭代遍历二叉搜索树实现插入节点,C++)
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| /** * 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; }
TreeNode* curr = root; TreeNode* parent = root; while(curr != NULL){//while循环当curr等于NULL时弹出,就是需要插入的节点位置 parent = curr; if(curr->val < val){ curr = curr->right; }else{ curr = curr->left; } }
//处理parent和新插入的节点位置的关系 TreeNode* node = new TreeNode(val); if(parent->val > val){//表示插入点在parent的左 parent->left = node; }else{ parent->right = node; }
return root; } };
|
450. 删除二叉搜索树中的节点(递归实现,C++)
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
class Solution { public: TreeNode* deleteNode(TreeNode* root, int key) {
if(root == NULL){ return root; }
if(root -> val == key && root->left == NULL && root->right == NULL){ delete root; return NULL; }else if(root->val == key && root->left != NULL && root->right == NULL){ TreeNode* node = root->left; delete root; return node; }else if(root->val == key && root->left == NULL && root->right != NULL){ TreeNode* node = root->right; delete root; return node; }else if(root->val == key && root->left != NULL && root->right != NULL){ TreeNode* curr = root->right; while(curr->left != NULL){ curr = curr->left; }
curr->left = root->left; TreeNode* tmp = root; root = root->right; delete tmp; return root; }
if(root->val < key){ root->right = deleteNode(root->right, key); } if(root->val > key){ root->left = deleteNode(root->left, key); } return root; } };
|
my-leetcode-logs-20230718
https://thewangyang.github.io/2023/07/18/leetcode-notes-20230718/