AgainUnderstand_102. Binary Tree Level Order Traversal_路漫漫远修兮

思路一:

#这个思路还是很清楚的
class Solution(object):
    def levelOrder(self, root):
        if not root:return []
        stack,queue,res,nCount=[root],[],[[root.val]],1
        while stack:
            temp=stack.pop(0)#保证从左边开始取结点
            if temp.left:
                stack.append(temp.left)#加结点 一个存储,一个中间转化
            if temp.right:
                stack.append(temp.right)
            nCount-=1
            if nCount==0:
                queue=[x.val for x in stack]
                res+=[queue] if queue else []
                nCount=len(stack)
            print(stack,res)
        return res



 

图解代码运行过程:

 

思路二:

class Solution(object):
    def levelOrder(self, root):
        result = []
        self.helper(root, 0, result)
        return result
    
    def helper(self, root, level, result):
        if root is None:
            return
        if len(result) <= level:#这里相当于创建一个列表[],为存储下一层元素做准备
            result.append([])
        result[level].append(root.val)
        print(result)
        self.helper(root.left, level+1, result)#这里有层次改变即level+1
        self.helper(root.right, level+1, result)

 

图解代码运行过程:

 

思路三:

#直接利用三个列表来做,作者思路很清楚,q:存储当前元素左右孩子,
#level:存储上次结点的值,这里不会索引越界,是因为没有删除元素,而是一直添加元素,
#这里遍历到上层的最后一个元素为止,尽管p中还有下层元素,也不会遍历
from collections import deque
class Solution(object):
    def levelOrder(self, root):
        """
        :type root: TreeNode
        :rtype: List[List[int]]
        """
        q, result = deque(), []
        if root:
            q.append(root)
        while len(q):
            level = []
            for _ in range(len(q)):
                x = q.popleft()
                level.append(x.val)
                if x.left:
                    q.append(x.left)
                if x.right:
                    q.append(x.right)
            result.append(level)
            print(result,level)
        return result

 

 

 

座右铭:站在别人的思想上,看见自己的不足,传播错误的经验,愿君不重蹈覆辙。

 

由于受限于本人经验,难免不足,如有建议,欢迎留言交流。

 

说明:

1.上面的图解步骤是本人在脑海中演算的,与当时的思考情况,仅仅作为理解的参考。

2.箭头代表了运行方向,数字代表了运行顺序。

3.之所以做这个,是因为本人对于二叉树的理解只能停留在“表面理解上”,对于里面究竟是怎么遍历的不清楚,所以就以题目给的例子,做了图解运行过程。

4.如果对您有帮助,请点赞,您的鼓励是本人前进的最好动力。

5.这里由于是对以前本人不理解代码的重新理解,所以省略了很多内容说明,详情请见本人博客链接。https://blog.csdn.net/qq_41827968/article/details/89458079

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: lbpcascade_frontalface.xml 和 haarcascade_eye_tree_eyeglasses.xml 是 OpenCV 中的人脸和眼睛识别分类器。lbpcascade_frontalface.xml 是基于 Local Binary Patterns (LBP) 算法的人脸识别分类器,可以用来检测人脸。haarcascade_eye_tree_eyeglasses.xml 是基于 Haar 特征的眼睛识别分类器,可以用来检测带有眼镜的眼睛。 ### 回答2: lbpcascade_frontalface.xml和haarcascade_eye_tree_eyeglasses.xml都是用于人脸识别和检测的级联分类器模型。 lbpcascade_frontalface.xml是一种基于局部二值模式(Local Binary Patterns, LBP)的级联分类器模型。它用于检测和识别人脸的正面。该模型通过选取面部图像的特征并进行分类,可以快速、准确地检测人脸,并标记出人脸的位置和边界框。 haarcascade_eye_tree_eyeglasses.xml是一种基于Haar特征的级联分类器模型。它用于检测眼睛和带眼镜的眼睛。该模型通过选取眼睛和眼镜的特征并进行分类,可以在人脸图像中找到眼睛和眼镜的位置,以便进行进一步的分析和识别。 这两种模型都是通过机器学习算法(通常是AdaBoost)训练得到的。模型训练过程中,会使用大量的正负样本进行训练和调优,以提高识别和检测的准确性和鲁棒性。在实际应用中,我们可以使用这些模型来构建人脸识别、人脸检测或人脸特征提取等功能。 ### 回答3: lbpcascade_frontalface.xml和haarcascade_eye_tree_eyeglasses.xml是用于计算机视觉中人脸和眼睛检测的数据文件。 这些数据文件是通过机器学习算法训练出来的。训练时,大量的含有人脸和眼睛的图片被用来训练分类器,并通过提取特征和分类器的训练来生成这些数据文件。 lbpcascade_frontalface.xml用于人脸检测。它基于局部二值模式(LBP)算法,通过在图像中寻找具有特定模式的像素区域,来确定人脸的位置和边界框。它可以检测图像中的正面人脸。 haarcascade_eye_tree_eyeglasses.xml用于眼睛检测。它基于Haar特征和级联分类器算法,通过检测眼睛特有的特征来确定眼睛的位置和边界框。它不仅可以检测眼睛,还可以检测带有眼镜的眼睛。 这些数据文件可以被集成到计算机视觉应用程序中,例如人脸识别、表情识别、眼睛跟踪等。它们可以帮助程序准确地找到人脸和眼睛区域,从而实现更精确和可靠的人脸和眼睛检测。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值