首页 > 编程语言 >代码随想录算法训练营day12|144.二叉树的前序遍历 94.二叉树的中序遍历 145.二叉树的后序遍历 还有十道题明早刷

代码随想录算法训练营day12|144.二叉树的前序遍历 94.二叉树的中序遍历 145.二叉树的后序遍历 还有十道题明早刷

时间:2024-10-11 21:32:59浏览次数:1  
标签:node 遍历 val self 随想录 right 二叉树 left

学习资料:https://programmercarl.com/二叉树理论基础.html

二叉树:满二叉树、完全二叉树、二叉搜索数、平衡二叉搜索树;
链式存储、顺序存储;
前序/中序/后序遍历
递归法、迭代法,层序
深度优先搜索dfs,广度优先搜索

学习记录:
144.二叉树的前序遍历(也要注重二叉数的输入方式;递归法比迭代法好理解)

点击查看代码
# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def preorderTraversal(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        # 迭代法
        result = []
        stack = []
        if root:
            stack.append(root)
        while stack:
            node = stack.pop()
            if node != None:
                if node.right:
                    stack.append(node.right)
                if node.left:
                    stack.append(node.left)
                stack.append(node)
                stack.append(None)
            else:
                node = stack.pop()
                result.append(node.val)
        return result




        # 递归法
        # res = []

        # def dfs(node):
        #     """
        #     深度优先搜索,前序遍历,根左右
        #     """
        #     if node is None:
        #         return 
        #     res.append(node.val)    # 根左右
        #     # 递归
        #     dfs(node.left) 
        #     dfs(node.right)
        
        # dfs(root)
        # return res

94.二叉树的中序遍历

点击查看代码
# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def inorderTraversal(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        result = []
        
        def dfs(node):
            if node is None:
                return
            # 左根右
            dfs(node.left)
            result.append(node.val)
            dfs(node.right)
        
        dfs(root)
        return result
        
        

145.二叉树的后序遍历

点击查看代码
# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def postorderTraversal(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        result = []

        def dfs(node):
            if node is None:   # 判断节点是否为NULL,如果是就下一条遍历了
                return
            dfs(node.left)      # 左右根
            dfs(node.right)
            result.append(node.val)
        
        dfs(root)
        return result

            
        

PS: 层序的十道题明天来完成,坐久了腰痛
阴转小雨,今晚吃了石锅拌饭,明白了人少有人少的道理,有点浪费原材料,不过还是吃的很开森,这不,又有力气干三道题了

标签:node,遍历,val,self,随想录,right,二叉树,left
From: https://www.cnblogs.com/tristan241001/p/18459404

相关文章

  • 代码随想录Day23 | LeetCode 455. 分发饼干、LeetCode 53. 最大子数组和、LeetCode 37
    LeetCode455.分发饼干贪心就是干classSolution:deffindContentChildren(self,g:List[int],s:List[int])->int:g.sort(reverse=True)s.sort(reverse=True)i=j=0res=0whilei<len(g)andj<len(......
  • 代码随想录算法训练营 | 完全背包,518. 零钱兑换 II,377. 组合总和 Ⅳ,70. 爬楼梯 (进阶)
    完全背包题目链接:完全背包文档讲解︰代码随想录(programmercarl.com)视频讲解︰完全背包日期:2024-10-11想法:dp数组设置思路跟01背包一样,不同在遍历上,完全背包遍历背包大小是从weight[i]开始的(背包空间小于weight[i]就没有意义,不用考虑,直接用之前的对应数值就行了),从前往后遍历就能......
  • 【hot100-java】二叉树的右视图
    二叉树篇tql /***Definitionforabinarytreenode.*publicclassTreeNode{*intval;*TreeNodeleft;*TreeNoderight;*TreeNode(){}*TreeNode(intval){this.val=val;}*TreeNode(intval,TreeNodeleft,Tre......
  • 刷题计划 day12 二叉树(一)【定义】【递归遍历】【迭代遍历】
    ⚡刷题计划day12 二叉树(一)继续,这一小节主要是基础知识,但同样也是十分重要的,可以点个免费的赞哦~往期可看专栏,关注不迷路,您的支持是我的最大动力......
  • 01数组算法/代码随想录
    一、数组好久没写算法题,之前喜欢按着习惯选择刷题,很早以前就听说代码随想录,今天跟着代码随想录再过一遍算法1.1二分查找常见疑问middle一定是在[left,right]这个范围内标准代码不会越界,因为在elseif中出现越界后,下一次循环就不会通过左闭右闭区间代码示例public......
  • 代码随想录算法训练营 | 1049. 最后一块石头的重量 II,494. 目标和,474.一和零
    1049.最后一块石头的重量II题目链接:1049.最后一块石头的重量II文档讲解︰代码随想录(programmercarl.com)视频讲解︰最后一块石头的重量II日期:2024-10-10想法:这这么会是分割等和子集一类的问题。。。Java代码如下:classSolution{publicintlastStoneWeightII(int[]......
  • 代码随想录算法训练营day11|150. 逆波兰表达式求值 239. 滑动窗口最大值 347.前 K
    学习资料:https://programmercarl.com/0150.逆波兰表达式求值.html#算法公开课栈、队列、堆学习记录:150.逆波兰表达式求值(中序表达式转换为后序表达式,用栈实现;遇到符号就从栈中取前两个元素进行运算,再放回去)点击查看代码fromoperatorimportadd,sub,muldefdiv(x,y):......
  • 详解二叉树的非递归遍历
    二叉树的非递归遍历:二叉树的非递归遍历使用栈或队列自身功能(先进后出或先进先出)来实现。对于非常深的树,递归可能导致栈溢出错误,因为每次递归调用都会占用栈空间。非递归遍历使用显式的栈或队列,可以更好地控制内存使用,避免这种问题。链表节点:classTreeNode{intv......
  • 「OC」NSArray的底层逻辑和遍历方法
    「OC」NSArray的底层逻辑和遍历方法文章目录「OC」NSArray的底层逻辑和遍历方法前言NSArray的底层逻辑占位符init后的空NSArray只有单个元素的NSArray大于一个元素的NSArray可变数组NSMutableArray总结图片遍历NSArray1.for循环2.枚举3.for—in4.多线程1.for循环&f......
  • 代码随想录算法训练营 | 背包问题 二维,背包问题 一维,416. 分割等和子集
    背包问题二维题目链接:背包问题二维文档讲解︰代码随想录(programmercarl.com)视频讲解︰背包问题二维日期:2024-10-09想法:dp[i][j],i表示需要从物品0-i中选择加入到背包中,j表示背包的容量,dp值表示最大的价值;递推公式,如果背包大小j都比此时要放的物品i的weight[i]小了,背包放不下......