二叉树的遍历

二叉树是一种非常重要的数据结构,很多数据结构是以根据二叉树来进行演化的。现在我们先介绍二叉树的遍历,有深度遍历和广度遍历(也就是平常说的层次遍历),深度遍历有前序、中序以及后序三种遍历方法。因为数的定义本身就是递归定义,因此采用递归的方法实现树的三种遍历不仅容易理解而且代码很简洁,对于层次遍历,需要其他数据结构的支撑,比如堆。
四种主要的遍历思想:
前序遍历:根结点 —> 左子树 —> 右子树
中序遍历:左子树—> 根结点 —> 右子树
后序遍历:左子树 —> 右子树 —> 根结点
层次遍历:只需按层次遍历即可
例如,求下面二叉树的各种遍历
在这里插入图片描述
前序遍历:12457836
中序遍历:42758136
后序遍历:47852631
层次遍历:12345678

参考链接:https://blog.csdn.net/My_Jobs/article/details/43451187
98

总结:
虽然还没结束,但是收获确实很大,通过这几天的学习,发现自己有很多不是很清楚,知识点可能还好。不过更多的是没想到python还有这个语法,所以有些时候看discussion的时候,就很难理解。不过总的来说成长真的蛮大的。

下面是我看discussion的答案,由于有些python的语法不知道,所以还不能理解。可是现在时间确实很紧,还没一一对照了解。

class Solution:
    def isValidBST(self, root, left = float('-inf'), right = float('inf')):
        """
        :type root: TreeNode
        :rtype: bool
        """
        if not root: 
            return True
        if root.val <= left or root.val >= right:
            return False
        # in the left branch, root is the new ceiling; contrarily root is the new floor in right branch
        return self.isValidBST(root.left, left, root.val) and self.isValidBST(root.right, root.val, right)

在这里插入图片描述

        if not root:
            return []
    
        q = []
        q.append(root)
        final = []
        while q:

            l = len(q)
            ans =[]
            for i in range(l):

                pop =q.pop(0)
                ans.append(pop.val)
                if pop.left:
                    q.append(pop.left)
                if pop.right:
                    q.append(pop.right)
            final.append(ans)

        return final

在这里插入图片描述

        q=[]
        level = 0
        q.append((root,level))
        res =[]
        pre = -1
        tmp=[]
        
        if root is None :
            return []
        
        while (q) :
            x,level = q.pop(0)
            
            if level == pre :
                tmp.append(x.val)
            else:
                if len(tmp)>0:
                    res.append(tmp)
                    tmp=[]
                tmp.append(x.val)
                
            pre =level 
            level=level+1
            
            if x.left :
                q.append((x.left,level))
            if x.right :
                q.append((x.right,level))
        
        if len(tmp) > 0 :
            res.append(tmp)
            
        return res[::-1]

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值