LeetCode刷题笔记-数据结构-day16
199、二叉树的右视图
1.题目描述2.解题思路3.代码 113、路径总和 II
1.题目描述2.解题思路3.代码 450、删除二叉搜索树中的节点
1.题目描述2.解题思路3.代码 LeetCode刷题笔记-数据结构-day16 199、二叉树的右视图 1.题目描述
2.解题思路原题链接:199、二叉树的右视图
算法:bfs+queue
具体步骤:
用一个队列queue存储每层的节点每次遍历每层节点,只将队列的第一个加入答案然后将该层的所有节点的子节点加入队列(先遍历右节点在遍历左节点),每遍历一个节点,该节点就出队该层节点出队后,进入下一层遍历,最终队列为空就结束了最终的答案就是二叉树的右视图 3.代码class Solution {public: vector
2.解题思路原题链接:113、路径总和 II
算法:递归遍历
具体思路:
用path存放当前路径的所有值,t表示当前路径的和,每次经过减去该节点的值从根节点开始递归判断条件:如果该节点是叶子节点并且t为0则表示该条路径符合要求,加入最终答案 3.代码class Solution {public: vector
原题链接:450、删除二叉搜索树中的节点
算法:递归
具体思路:
如果key小于当前节点值,则递归左子树查找对应的key删除:dfs(root->left,key);如果key大于当前节点值,则递归右子树查找对应的key删除:dfs(root->right,key);如果key等于当前节点值,有分为以下几种情况: 如果当前节点没有左子树也没有右子树则直接置为NULL,表示删除如果当前节点有左子树没有右子树,则直接将当前节点置为左子树即可:root=root->right;如果当前节点有右子树没有左子树,则直接将当前节点置为右子树即可:root=root->left;如果当前节点既存在左子树又存在右子树,则递归遍历到右子树的最小值节点,将当前节点的值置为该最小值: root->val=t->val;,然后递归删除右子树的这个最小值节点:dfs(root->right,t->val); 3.代码class Solution {public: TreeNode* deleteNode(TreeNode* root, int key) { dfs(root,key); return root; } void dfs(TreeNode* &root,int key){ if(!root) return; if(key