ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:32.79KB ,
资源ID:4119196      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4119196.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(leetcode 力扣 199 二叉树的右视图题解 算法题.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

leetcode 力扣 199 二叉树的右视图题解 算法题.docx

1、leetcode 力扣 199 二叉树的右视图 题解 算法题题目:二叉树的右视图给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例 1:输入:1,2,3,null,5,null,4输出:1,3,4示例 2:输入:1,null,3输出:1,3示例 3:输入:输出:提示:二叉树的节点个数的范围是 0,100-100= Node.val Listint: rightmost_value_at_depth = dict() # 深度为索引,存放节点的值 max_depth = -1 stack = (root, 0) while stac

2、k: node, depth = stack.pop() if node is not None: # 维护二叉树的最大深度 max_depth = max(max_depth, depth) # 如果不存在对应深度的节点我们才插入 rightmost_value_at_depth.setdefault(depth, node.val) stack.append(node.left, depth + 1) stack.append(node.right, depth + 1) return rightmost_value_at_depthdepth for depth in range(max

3、_depth + 1)语言:Pythonclass Solution: def rightSideView(self, root: TreeNode) - Listint: rightmost_value_at_depth = dict() # 深度为索引,存放节点的值 max_depth = -1 queue = deque(root, 0) while queue: node, depth = queue.popleft() if node is not None: # 维护二叉树的最大深度 max_depth = max(max_depth, depth) # 由于每一层最后一个访问到的

4、节点才是我们要的答案,因此不断更新对应深度的信息即可 rightmost_value_at_depthdepth = node.val queue.append(node.left, depth + 1) queue.append(node.right, depth + 1) return rightmost_value_at_depthdepth for depth in range(max_depth + 1)语言:Javaclass Solution public List rightSideView(TreeNode root) Map rightmostValueAtDepth =

5、new HashMap(); int max_depth = -1; Deque nodeStack = new ArrayDeque(); Deque depthStack = new ArrayDeque(); nodeStack.push(root); depthStack.push(0); while (!nodeStack.isEmpty() TreeNode node = nodeStack.pop(); int depth = depthStack.pop(); if (node != null) / 维护二叉树的最大深度 max_depth = Math.max(max_dep

6、th, depth); / 如果不存在对应深度的节点我们才插入 if (!rightmostValueAtDepth.containsKey(depth) rightmostValueAtDepth.put(depth, node.val); nodeStack.push(node.left); nodeStack.push(node.right); depthStack.push(depth + 1); depthStack.push(depth + 1); List rightView = new ArrayList(); for (int depth = 0; depth = max_d

7、epth; depth+) rightView.add(rightmostValueAtDepth.get(depth); return rightView; 语言:Javaclass Solution public List rightSideView(TreeNode root) Map rightmostValueAtDepth = new HashMap(); int max_depth = -1; Queue nodeQueue = new ArrayDeque(); Queue depthQueue = new ArrayDeque(); nodeQueue.add(root);

8、depthQueue.add(0); while (!nodeQueue.isEmpty() TreeNode node = nodeQueue.remove(); int depth = depthQueue.remove(); if (node != null) / 维护二叉树的最大深度 max_depth = Math.max(max_depth, depth); / 由于每一层最后一个访问到的节点才是我们要的答案,因此不断更新对应深度的信息即可 rightmostValueAtDepth.put(depth, node.val); nodeQueue.add(node.left); n

9、odeQueue.add(node.right); depthQueue.add(depth + 1); depthQueue.add(depth + 1); List rightView = new ArrayList(); for (int depth = 0; depth = max_depth; depth+) rightView.add(rightmostValueAtDepth.get(depth); return rightView; 语言:Javaclass Solution public List rightSideView(TreeNode root) List res =

10、 new ArrayList(); if (root = null) return res; Queue queue = new LinkedList(); queue.offer(root); while (!queue.isEmpty() int size = queue.size(); for (int i = 0; i size; i+) TreeNode node = queue.poll(); if (node.left != null) queue.offer(node.left); if (node.right != null) queue.offer(node.right);

11、 if (i = size - 1) /将当前层的最后一个节点放入结果列表 res.add(node.val); return res; 语言:C+class Solution public: vector rightSideView(TreeNode* root) unordered_map rightmostValueAtDepth; int max_depth = -1; stack nodeStack; stack depthStack; nodeStack.push(root); depthStack.push(0); while (!nodeStack.empty() TreeNo

12、de* node = nodeStack.top();nodeStack.pop(); int depth = depthStack.top();depthStack.pop(); if (node != NULL) / 维护二叉树的最大深度 max_depth = max(max_depth, depth); / 如果不存在对应深度的节点我们才插入 if (rightmostValueAtDepth.find(depth) = rightmostValueAtDepth.end() rightmostValueAtDepthdepth = node - val; nodeStack.push

13、(node - left); nodeStack.push(node - right); depthStack.push(depth + 1); depthStack.push(depth + 1); vector rightView; for (int depth = 0; depth = max_depth; +depth) rightView.push_back(rightmostValueAtDepthdepth); return rightView; ;语言:C+class Solution public: vector rightSideView(TreeNode* root) u

14、nordered_map rightmostValueAtDepth; int max_depth = -1; queue nodeQueue; queue depthQueue; nodeQueue.push(root); depthQueue.push(0); while (!nodeQueue.empty() TreeNode* node = nodeQueue.front();nodeQueue.pop(); int depth = depthQueue.front();depthQueue.pop(); if (node != NULL) / 维护二叉树的最大深度 max_depth

15、 = max(max_depth, depth); / 由于每一层最后一个访问到的节点才是我们要的答案,因此不断更新对应深度的信息即可 rightmostValueAtDepthdepth = node - val; nodeQueue.push(node - left); nodeQueue.push(node - right); depthQueue.push(depth + 1); depthQueue.push(depth + 1); vector rightView; for (int depth = 0; depth = max_depth; +depth) rightView.p

16、ush_back(rightmostValueAtDepthdepth); return rightView; ;语言:CPPclass Solution public: vectorvector levelOrder(TreeNode* root) queue que; if (root != NULL) que.push(root); vectorvector result; while (!que.empty() int size = que.size(); vector vec; / 这里一定要使用固定大小size,不要使用que.size(),因为que.size是不断变化的 for

17、 (int i = 0; i val); if (node-left) que.push(node-left); if (node-right) que.push(node-right); result.push_back(vec); return result; ;语言:CPPclass Solution public: vectorvector levelOrderBottom(TreeNode* root) queue que; if (root != NULL) que.push(root); vectorvector result; while (!que.empty() int s

18、ize = que.size(); vector vec; for (int i = 0; i val); if (node-left) que.push(node-left); if (node-right) que.push(node-right); result.push_back(vec); reverse(result.begin(), result.end(); / 在这里反转一下数组即可 return result; ;语言:CPPclass Solution public: vector rightSideView(TreeNode* root) queue que; if (

19、root != NULL) que.push(root); vector result; while (!que.empty() int size = que.size(); for (int i = 0; i val); / 将每一层的最后元素放入result数组中 if (node-left) que.push(node-left); if (node-right) que.push(node-right); return result; ;语言:go/*102. 二叉树的层序遍历 */func levelOrder(root *TreeNode) int res:=int if root

20、=nil/防止为空 return res queue:=list.New() queue.PushBack(root) var tmpArr int for queue.Len()0 length:=queue.Len()/保存当前层的长度,然后处理当前层(十分重要,防止添加下层元素影响判断层中元素的个数) for i:=0;i 0 length := len(que) for i := 0; i 0 length := que.Len() for i := 0; i length; i+ t := que.Front().Value.(*TreeNode) que.Remove(que.Fr

21、ont() if t.Left != nil que.PushBack(t.Left) if t.Right != nil que.PushBack(t.Right) if i = length - 1 ans = append(ans, t.Val) return ans语言:javascriptvar levelOrder = function(root) /二叉树的层序遍历 let res=,queue=; queue.push(root); if(root=null) return res; while(queue.length!=0) / 记录当前层级节点数 let length=q

22、ueue.length; /存放每一层的节点 let curLevel=; for(let i=0;ilength;i+) let node=queue.shift(); curLevel.push(node.val); / 存放当前层下一层的节点 node.left&queue.push(node.left); node.right&queue.push(node.right); /把每一层的结果放到结果数组 res.push(curLevel); return res;语言:javascriptvar levelOrderBottom = function(root) let res=,q

23、ueue=; queue.push(root); while(queue.length&root!=null) / 存放当前层级节点数组 let curLevel=; / 计算当前层级节点数量 let length=queue.length; while(length-) let node=queue.shift(); / 把当前层节点存入curLevel数组 curLevel.push(node.val); / 把下一层级的左右节点存入queue队列 node.left&queue.push(node.left); node.right&queue.push(node.right); res.push(curLevel); return res.reverse();语言:javascriptvar rightSideView = function(root) /二叉树右视图 只需要把每一层最后一个节点存储到res数组 let res=,queue=; queue.push

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1