代码随想录算法训练营day14

      这里主要是对二叉树进行学习

第一部分主要是针对二叉树的定义来学习的,二叉树实际上可以理解成有左右方向的链表,拥有链式存储和线性存储两种方式,但是我们一般使用链式存储。

二叉树的遍历也是十分重要的点,后面二叉树的相关题目很多就是围绕二叉树遍历来做的。分为深度优先遍历和广度优先遍历。

深度优先遍历就是前序遍历、中序遍历、后序遍历三种。

广度优先遍历就是层序遍历。

我个人感觉层序遍历应用范围很广,而前中后序遍历可以看代码随想录网站上面的这个图:

接下来是二叉树的定义,在leetcode上是核心代码模式就不用写定义,但是一般都得去定义好:

Class TreeNode:

        def __init__(self,val):

                self.val=val

                self.right=None

                self.left=None

        第二部分就是二叉树的遍历实现,首先是递归遍历,递归的方法非常简单但是抽象。

前序遍历

def getNode(self,root):

        if not root:

                return None

        left=self.getNode(root.left)

        right=self.getNode(root.right)

        return [root.val]+left+right     #注意这里的[root.val]会带着val

后序遍历就是把return改一下成

        return left+right+[root.val]

中序遍历就是把return改一下成

        return left+[root.val]+right

第三部分是二叉树的迭代遍历:迭代遍历这里使用栈来做

前序遍历

def getNode(self,root):

        if not root:

                return []

        stack=[root]

        result=[]

        while stack:

                Node=stack.pop()

                result.append(Node.val)

                if Node.right:

                        stack.append(Node.right)

                if Node.left:

                        stack.append(Node.left)

        return result

后序遍历,后序遍历可由前序遍历稍微修改得到,先改变左右的顺序,然后再翻转result即可

def getNode(self,root):

        if not root:

                return []

        stack=[root]

        result=[]

        while stack:

                Node=stack.pop()

                result.append(Node.val)

                if Node.left:

                        stack.append(Node.left)

                if Node.right:

                        stack.append(Node.right)               

        return result[::-1]

中序遍历的遍历流程有所不同,使用了指针来访问节点

def getNode(self,root):

        if not root:

                return []

        stack=[]

        result=[]

        cur=root

        while cur or stack:

                if cur:

                        stack.append(cur)

                        cur=cur.left

                else:

                        cur=stack.pop()

                        result.append(cur.val)

                        cur=cur.right

        return result

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值