513 找树左下角的值

solution

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
# 这个题有坑:最底层的最左边结点的值包含:1.最底层;2.最左边
# 1.最底层肯定是叶子节点,但是叶子节点不一定在最底层
# 2.最左边的不一定是父节点的左孩子
class Solution:def getheight(self,root):if root.left==None and root.right==None:return 1else:h1=0h2=0if root.left: h1=self.getheight(root.left)if root.right: h2=self.getheight(root.right)return 1+max(h1,h2)def traversal(self,node,cur_height,max_height,record):print(node.val,cur_height)if node.left==None and node.right==None and cur_height==max_height:record.append(node.val)return  else:cur=cur_height #这里也容易写错!!!if node.left:cur+=1self.traversal(node.left,cur,max_height,record)cur-=1if node.right:cur+=1self.traversal(node.right,cur,max_height,record)cur-=1def findBottomLeftValue(self, root: Optional[TreeNode]) -> int:height=self.getheight(root)print(height)record=[]self.traversal(root,1,height,record)print(record)if record: return record.pop(0)else:if height==1: return root.valelse:return None

注意1!!!

这个题有坑:最底层的最左边结点的值包含:1.最底层;2.最左边

  1. 最底层肯定是叶子节点,但是叶子节点不一定在最底层
  2. 最左边的不一定是父节点的左孩子

注意2!!!

cur=cur_height
第一次这里的bug卡了好久,cur应该设置为一个全局变量,临时做的+1或者-1传入函数中,因为需要在出口判断。

函数中的cur_height表示当前节点所处在的层数;
cur记录根节点的层数,cur+1作为它的孩子结点所在的层数属性传入。用来回溯的关键!!!

递归三部曲再背一遍!!!

参数!
出口!
前/中/后 序遍历,中所在的地方表示处理根节点,其实cur=cur_height那行可以看成我在处理根节点。

112 路径总和

solution(全部是我自己写的噢!!!没有看视频!!!)

class Solution:def traversal(self,root,targetSum,path,flag):if root: path.append(root.val)#这句话的位置很关键else:returnif root.left==None and root.right==None and sum(path)==targetSum:flag[0]=Truereturnif root.left:#path.append(root.left.val) self.traversal(root.left,targetSum,path,flag)path.pop()if root.right:#path.append(root.right.val)self.traversal(root.right,targetSum,path,flag)path.pop()def hasPathSum(self, root: Optional[TreeNode], targetSum: int) -> bool:path=[]flag=[False]self.traversal(root,targetSum,path,flag)return flag[0]

一定要注意第三行代码的位置不要放后面去了
因为传统都是先写出口再处理中序遍历(中左右),但是因为我们需要把叶子结点的值让仅考虑的因素里,所以需要先处理“中”。

106.从中序与后序遍历序列构造二叉树

思路(我看的视频,因为我连手写怎么做都忘记了)

  1. 后序数组为0,说明无二叉树,返回空节点
  2. 后序数组的最后一个元素作为节点元素
  3. 在中序数组中寻找切割点 -> 切割中序数组
  4. 切割后续数组
  5. 递归地处理左区间和有区间

solution

class Solution:def getindex(self,list,taget):for i in range(len(list)):if list[i]==taget:breakreturn idef traversal(self,inorder,postorder):if postorder==[]: return None# 根节点rootval=postorder.pop() #这里不能写pop,因为下面有判断post是否只有一个结点,如果是就返回root=TreeNode(rootval,None,None)# 这里指特殊情况,不是出口#if len(postorder)==1: return root# 切了中序数组,得到了左,右rootindex=self.getindex(inorder,rootval)inorder_left=inorder[:rootindex]inorder_right=inorder[rootindex+1:]# 怎么切后续数组呢(我不会):用中序数组切割出来的左中序的长度postorder_left=postorder[:len(inorder_left)]postorder_right=postorder[len(inorder_left):]# 递归调用,构造子树root.left=self.traversal(inorder_left,postorder_left)root.right=self.traversal(inorder_right,postorder_right)return rootdef buildTree(self, inorder: List[int], postorder: List[int]) -> Optional[TreeNode]:return self.traversal(inorder,postorder)

Suzy找到实习了吗Day 18 | 二叉树进行中:513 找树左下角的值,112 路径总和 ,106.从中序与后序遍历序列构造二叉树相关推荐

  1. 代码随想录第18天|找树左下角的值,路径总和,从中序和后序遍历序列构造二叉树

    LeetCode513.找树左下角的值 题目链接:513. 找树左下角的值 - 力扣(LeetCode) 思路: 迭代法(只需要记录最后一行第一个节点的数值就可以了.): /*** Definitio ...

  2. leetcode 106. 从中序与后序遍历序列构造二叉树 c语言递归解法

    如题: 根据一棵树的中序遍历与后序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素.例如,给出 中序遍历 inorder = [9,3,15,20,7] 后序遍历 postorder = [9, ...

  3. 【LeetCode系列】从中序与后序遍历序列构造二叉树 从前序与中序遍历序列构造二叉树...

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 105. 从前序与中序遍历序列构造二叉树 根据一棵树的前序遍历与中序遍历构造二叉树 ...

  4. 树与二叉树 | 实验3:由遍历序列构造二叉树

    实验3:由遍历序列构造二叉树 二叉树构造定理: 定理7.1:任何n(n>0)个不同结点的二又树,都可由它的中序序列和先序序列唯一地确定. 定理7.2:任何n(n>0)个不同结点的二又树,都 ...

  5. 105从前序与中序遍历序列构造二叉树 106 从中序与后序遍历序列构造二叉树 (递归 + 哈希)

    引言 这两道题主要是考察二叉树遍历的掌握,即由前序和中序推出原二叉树,由后序和中序推出原二叉树,这里先来说一下推导过程: 前序和中序 知道前序遍历和中序遍历,如何推原二叉树?(直接是结论,可以自行推导 ...

  6. [Leedcode][JAVA][第105题][从前序与中序遍历序列构造二叉树][栈][递归][二叉树]

    [问题描述][中等] 根据一棵树的前序遍历与中序遍历构造二叉树.注意: 你可以假设树中没有重复的元素.例如,给出前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = ...

  7. java用中根后根序列构造二叉树,106. 从中序与后序遍历序列构造二叉树

    题目描述 根据一棵树的中序遍历与后序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 示例: 例如,给出 中序遍历 inorder = [9,3,15,20,7] 后序遍历 postorder ...

  8. 由遍历序列构造二叉树

    不同二叉树的中序遍历序列 由遍历序列构造二叉树 前序+中序遍历序列 由二叉树的先序序列和中序序列可以唯一地确定一棵二叉树. 在先序遍历序列中,第一个结点一定是二叉树的根结点:而在中序遍历中,根结点必然 ...

  9. 二叉树 中序遍历 python_leetcode No.105 从前序与中序遍历序列构造二叉树

    题目链接: 从前序与中序遍历序列构造二叉树 - 力扣(LeetCode)​leetcode-cn.com 题目描述: 根据一棵树的前序遍历与中序遍历构造二叉树,可以假设树中没有重复的元素. 示例: 前 ...

最新文章

  1. 【深度学习笔记】CUDA
  2. 如何使用eclipse打开已有工程
  3. AQS理解之二,自己设计一个锁
  4. spring学习(48):自动装配中定义的bean的作用域
  5. nuget 包版本冲突解决 packages.config
  6. Maven学习总结(26)——maven update时,报:Preference node org.eclipse.wst.validation...
  7. codeforces 762E(cdq分治)
  8. docker java 中文乱码_java使用awt包在生产环境docker部署时出现中文乱码的处理
  9. Kubernetes对象之Replication Controller(RC)和Replica Sets(RS)
  10. 系统升级时,数据库脚本执行注意事项,血的教训
  11. 软件项目开发报价指南
  12. 【ArcGIS教程】ArcGIS软件操作——地图配准
  13. netty 权威指南~第11章——WebSoket协议开发
  14. OpenCV曝光参数和快门时间的对应关系
  15. Java自动生成编号
  16. c语言中千分号的用法,在ChemDraw中输入千分号的教程
  17. Python + qrcode 实现文字转二维码
  18. 学神经网络应该看看哪些书,神经网络相关书籍
  19. Java用户账号密码创建登录
  20. OpenGL之建立三维坐标网格

热门文章

  1. CountDownLatch闭锁,join和yield的区别
  2. 桌面宠物/小猫代打/圣诞树
  3. Paper Reading 《SimCSE》
  4. 高通平台 UART log 开启方法
  5. C4专项工程师能力认证 考纲
  6. WebSocket - 一篇文章读懂websocket
  7. 敏捷与数字化转型银行_使敏捷人超越数字化
  8. VMware 8.0 安装 FC5 的VMware tools
  9. 关于学术论文投稿中的 Cover Letter
  10. 单位弹性需求曲线形状_需求曲线为直线时,在单位弹性点上总收益为最大。 - 问答库...