欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

LeetCode刷题笔记-数据结构-day16

时间:2023-06-06
文章目录

LeetCode刷题笔记-数据结构-day16

199、二叉树的右视图

1.题目描述2.解题思路3.代码 113、路径总和 II

1.题目描述2.解题思路3.代码 450、删除二叉搜索树中的节点

1.题目描述2.解题思路3.代码 LeetCode刷题笔记-数据结构-day16 199、二叉树的右视图 1.题目描述

原题链接:199、二叉树的右视图

2.解题思路

算法:bfs+queue

具体步骤:

用一个队列queue存储每层的节点每次遍历每层节点,只将队列的第一个加入答案然后将该层的所有节点的子节点加入队列(先遍历右节点在遍历左节点),每遍历一个节点,该节点就出队该层节点出队后,进入下一层遍历,最终队列为空就结束了最终的答案就是二叉树的右视图 3.代码

class Solution {public: vector rightSideView(TreeNode* root) { vector res; if(!root) return res; queue q; q.push(root); while(q.size()){ int k=q.size(); res.push_back(q.front()->val); while(k--){ auto t=q.front(); if(t->right) q.push(t->right); if(t->left) q.push(t->left); q.pop(); } } return res; }};

113、路径总和 II 1.题目描述

原题链接:113、路径总和 II

2.解题思路

算法:递归遍历

具体思路:

用path存放当前路径的所有值,t表示当前路径的和,每次经过减去该节点的值从根节点开始递归判断条件:如果该节点是叶子节点并且t为0则表示该条路径符合要求,加入最终答案 3.代码

class Solution {public: vector> res; vector> pathSum(TreeNode* root, int t) { vector path; dfs(root,t,path); return res; } void dfs(TreeNode* root,int t,vector path){ if(!root) return; t-=root->val; path.push_back(root->val); if(!root->left&&!root->right){ if(t==0) res.push_back(path); } dfs(root->left,t,path); dfs(root->right,t,path); }};

450、删除二叉搜索树中的节点 1.题目描述

原题链接:450、删除二叉搜索树中的节点


2.解题思路

算法:递归

具体思路:

如果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(keyval) dfs(root->left,key); else if(key>root->val) dfs(root->right,key); else{ if(!root->left&&!root->right) root=NULL; else if(!root->left) root=root->right; else if(!root->right) root=root->left; else{ auto t=root->right; while(t->left) t=t->left; root->val=t->val; dfs(root->right,t->val); } } }};

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。