首页 > 其他分享 >day16-binary tree-part04-7.18

day16-binary tree-part04-7.18

时间:2024-07-19 12:28:52浏览次数:20  
标签:binary right cur self tree depth day16 result left

tasks for today

1. 513 找树左下角值

2. 112路径总和

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

-------------------------------------------------------------------------------

1. 513 找树左下角值

This practice is suitable for the BFS (layer traverse), record each layer's value and return the last layer's first value

# 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
class Solution:
    def findBottomLeftValue(self, root: Optional[TreeNode]) -> int:
        result = []
        nodeQueue = collections.deque([root])
        while nodeQueue:
            level = []
            for _ in range(len(nodeQueue)):
                cur = nodeQueue.popleft()
                level.append(cur.val)
                if cur.left:
                    nodeQueue.append(cur.left)
                if cur.right:
                    nodeQueue.append(cur.right)
            result.append(level)
        
        return result[-1][0]

本题如果使用dfs,前序遍历需要进行回溯

本题若使用递归法需要注意的是中止条件部分需要进行修改,除了正常的中止,要记得是否需要更新深度,以及更新result值,这个result值是外界的,不会参与每个点的递归

class Solution:
    def findBottomLeftValue(self, root: TreeNode) -> int:
        self.max_depth = float('-inf')
        self.result = None
        self.traversal(root, 0)
        return self.result
    
    def traversal(self, node, depth):
        if not node.left and not node.right:
            if depth > self.max_depth:
                self.max_depth = depth
                self.result = node.val
            return
        
        if node.left:
            depth += 1
            self.traversal(node.left, depth)
            depth -= 1
        if node.right:
            depth += 1
            self.traversal(node.right, depth)
            depth -= 1

2. 112路径总和

本题采用迭代法,BFS广度优先搜索,最合适,并且本题蕾丝与另一道找到所有二叉树路径的题目;基本思路就是再定义一个deque来记录pathsum的push过程,然后用一个result来存储结果

# 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
class Solution:
    def hasPathSum(self, root: Optional[TreeNode], targetSum: int) -> bool:
        if root is None:
            return False
        if root.left is None and root.right is None:
            if root.val == targetSum: return True
            else: return False
        nodeQueue = collections.deque([root])
        pathQueue = collections.deque([0])
        result = []
        while nodeQueue:
            cur = nodeQueue.popleft()
            pathsum = pathQueue.popleft() + cur.val
            if cur.left:
                nodeQueue.append(cur.left)
                pathQueue.append(pathsum)
            if cur.right:
                nodeQueue.append(cur.right)
                pathQueue.append(pathsum)
            if cur.left is None and cur.right is None:
                result.append(pathsum)
        
        if targetSum in result: return True
        else: return False

 

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

pending, because my laptop is sent to get repaired, get in some water

标签:binary,right,cur,self,tree,depth,day16,result,left
From: https://blog.csdn.net/bbrruunnoo/article/details/140515575

相关文章

  • B树(B-tree)
    B树(B-tree)是一种自平衡的树形数据结构,主要用于存储大量数据的环境,如文件系统和数据库。B树设计的初衷是为了减少磁盘I/O操作次数,因为磁盘的随机访问比连续访问慢得多。B树的关键特性在于,它允许每个节点存储多个键值和指针,从而减少树的高度,使得查找、插入和删除操作能够在对......
  • C. Binary String Copying
    原题链接题解假如两个区间经过操作之后得到的字符串一样,说明不规则仅出现在两个区间的重合处code#include<bits/stdc++.h>#definelllonglongusingnamespacestd;intl0[200005]={0};intr1[200005]={0};voidsolve(){intn,m;cin>>n>>m;strings;......
  • 界面控件DevExpress Blazor UI v24.1 - 发布全新TreeList组件
    DevExpress BlazorUI组件使用了C#为BlazorServer和BlazorWebAssembly创建高影响力的用户体验,这个UI自建库提供了一套全面的原生BlazorUI组件(包括PivotGrid、调度程序、图表、数据编辑器和报表等)。DevExpress Blazor控件目前已经升级到v24.1版本了,此版本发布了全新的TreeLi......
  • 【Windows】系统盘空间不足?WizTree 和 DISM++ 来帮忙
    当您的系统盘空间接近饱和时,了解硬盘空间的使用情况变得尤为重要。在这种情况下,您可以利用Windows内置的存储使用工具来快速查看哪些文件和应用程序占用了大量空间,并采取相应措施进行清理。此外,第三方工具如WizTree可以提供更深入的分析和更高级的清理选项。使用Windo......
  • 云计算实训06——find、stat、touch、tree、scp、crontab指令相关应用
    一、find命令1.find的作用:对文件进行搜索2.基本语法:                    find[文件路径][选项选项的值]3.常见的选项-name根据文件的名称搜索文件,支持通配符*-typef 代表普通文件,-typed代表目录4.*通配符在l......
  • B. Nezzar and Binary String
    原题链接题解正着来发现很怪,倒着来发现顺多了code#include<bits/stdc++.h>#definelllonglongusingnamespacestd;constllN=114514;lltree[8*N]={0};lltag[8*N]={0};stringa,b;voidbuild(intnode,intl,intr){tag[node]=-1;if(l==r){......
  • D. X(or)-mas Tree
    原题链接题解给定若干条路径限制,问是否合法对于树上任意三个点\(a,b,c\)(不一定直接相连),如果已知\(a\oplusb,b\oplusc\)那么\(a\oplusc\)也已知所以我们可以对限制里相连的节点放到一个集合里,并且统一记录他们到集合头领的路径异或值由于奇数个1异或偶数个1之间的异......
  • Wmware简单用法之Tree、Find、修改文件的创建时间及删除 、Scp、生成指定大小的文件
    find主要进行文件搜索基本语法find[文件路径][选项选项的值]常见选项-name 根据文件名称搜索文件,支持通配符*-type f代表普通文件   d代表目录*通配符在linux系统中,如果要查找的⽂件的名称不清晰,可以使⽤部分⽂件名+*搜索[root@localhost~]#find/opt/......
  • 运算式树(Expression tree)深入学习
    前言运算式树(Expressiontree)是二叉树数据结构。目的是实现方便的叠加各种查询条件,无限制的拼接成一个查询条件。提高复杂查询逻辑的编码效率。一、Lambda表达式Lambda表达式分为运算式Lambda和语句式Lambda下面用两种lambda实现同样功能的委托。(1)运算式Lambda(Expressionla......
  • Solution - Codeforces 1311E Construct the Binary Tree
    先去考虑找一下无解条件。首先就是有\(d\)关于\(n\)的下界\(L\),就是弄成一颗完全二叉树的答案。其次有\(d\)关于\(n\)的上界\(R\),就是成一条链的样子。首先当\(d<L\)或\(R<d\)时显然无解。对于\(L\led\leR\)又如何去判定。能发现没有一个比较好的判定......