235.二叉搜索树的最近公共祖先
题目链接:力扣
看见题目的第一想法:
这题一看就晓得要用二叉搜索树的特性来解决,但一开始还是没什么好的思路,去看了视频才回来完成的,顺便也把二叉搜索树迭代法也见识了一遍
class Solution { public: TreeNode* traversl(TreeNode* node, TreeNode* p, TreeNode* q) { // 这里就包含了祖先是自身的情况 if(node == NULL || node == p || node == q) { return node; } if(node->val > p->val && node->val > q->val) { TreeNode* left = traversl(node->left, p, q); if(left != NULL) { return left; } } if(node->val < p->val && node->val < q->val) { TreeNode* right = traversl(node->right, p, q); if(right != NULL) { return right; } } return node; } TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { // 思路:根据二叉搜索树特性,通过值来解决问题 return traversl(root, p, q); } };
class Solution { public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { // 思路:迭代法 while(root) { if(root->val > p->val && root->val > q->val) { root = root->left; }else if(root->val < p->val && root->val < q->val) { root = root->right; }else { return root; } }return NULL; } };
遇到的困难:
暂时没太大的困难
701.二叉搜索树中的插入操作
题目链接:力扣
看见题目的第一想法:
这题由于二叉搜索树,一下子就有个想法怎么做了,使用这个特性不改变二叉搜索树的结构还是很好做的
class Solution { public: TreeNode* insertIntoBST(TreeNode* root, int val) { // 迭代法 if(root == NULL) { root = new TreeNode(val); return root; } TreeNode* cur = root; while(cur != NULL) { if(cur->val > val) { if(cur->left == NULL) { cur->left = new TreeNode(val); break; } cur = cur->left; } else { if(cur->right == NULL) { cur->right = new TreeNode(val); break; } cur = cur->right; } } return root; } };
class Solution { public: TreeNode* traversal(TreeNode* node, int val) { if(node == NULL) { node = new TreeNode(val); return node; } if(node->val > val) node->left = traversal(node->left, val); if(node->val < val) node->right = traversal(node->right, val); return node; } TreeNode* insertIntoBST(TreeNode* root, int val) { // 递归法 return traversal(root, val); } };
遇到的问题:
没有太大的问题
450.删除二叉搜索树中的节点
题目链接:力扣
看见题目的第一想法:
看到题目时有点懵,不晓得怎么去操作,看了carl哥视频讲解讲完思路之后,就晓得怎么去实现了,最后也顺利实现了出来,还不错
class Solution { public: TreeNode* traversal(TreeNode* node, int key) { if(node == NULL) return NULL; if(node->val != key) { node->left = traversal(node->left, key); node->right = traversal(node->right, key); } else { if(node->left == NULL && node->right == NULL) { return NULL; } else if(node->left == NULL && node->right != NULL) { return node->right; } else if(node->left != NULL && node->right == NULL) { return node->left; } else { TreeNode* tmp = node->right; while(tmp->left != NULL) { tmp = tmp->left; } tmp->left = node->left; return node->right; } } return node; } TreeNode* deleteNode(TreeNode* root, int key) { return traversal(root, key); } };
遇到的困难:
没有遇到太大的困难