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.youkuaiyun.com/qq_41827968/article/details/89458079

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值