• 二叉树的递归遍历


    二叉树的前序遍历-力扣
    二叉树的中序遍历-力扣
    二叉树的后序遍历-力扣

    基础知识

    • 满二叉树: 只有度为0和度为2的结点,结点伸出去的枝丫数就是度,层高k,奇点数2^k-1。
    • 完全二叉树:层高h,最后一层结点数1~2^(h-1),最后一层优先左子树满结点。
    • 二叉搜索树:左孩子结点小于根节点,右孩子结点大于根节点
    • 平衡二叉搜索树:左子树与右子树层高差值的绝对值小于等于1,且都是二叉搜索数
    • 深度优先遍历:前序、中序、后序遍历,指的中间结点位置;递归,可用栈实现。
      • 前序:中左右
      • 中序:左中右
      • 后序:左右中
    • 广度优先遍历:层序遍历,用队列。

    递归

    • 递归三要素
    1. 确定递归函数的参数和返回值
    2. 确定终止条件
    3. 确定单层递归的逻辑

    二叉树的前序遍历

    单层递归的逻辑:中左右
    终止条件:if cur==None:return
    递归需要的参数和返回值:root结点,存结果的数组res

    # Definition for a binary tree node.
    # class TreeNode:
    #     def __init__(self, val=0, left=None, right=None):
    #         self.val = val
    #         self.left = left
    #         self.right = right
    class Solution:
       def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
           #异常处理
           if root==None:
               return []
           res=[]
           self.traversal(root,res)
           return res
    
       def traversal(self,root,res):
           if root==None:
               return;
           res.append(root.val)
           self.traversal(root.left,res)
           self.traversal(root.right,res)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    二叉树的中序遍历

    单层递归的逻辑:左中右

    # Definition for a binary tree node.
    # class TreeNode:
    #     def __init__(self, val=0, left=None, right=None):
    #         self.val = val
    #         self.left = left
    #         self.right = right
    class Solution:
       def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
           if root==None:
               return []
           res=[]
           self.traversal(root,res)
           return res
           
              
       def traversal(self,root,res):
           #终止条件
           if root==None:
               return
           #左中右
           self.traversal(root.left,res)
           res.append(root.val)
           self.traversal(root.right,res)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    二叉树的后序遍历

    单层逻辑:左右中

    # Definition for a binary tree node.
    # class TreeNode:
    #     def __init__(self, val=0, left=None, right=None):
    #         self.val = val
    #         self.left = left
    #         self.right = right
    class Solution:
       def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
           if root==None:
               return []
           res=[]
           self.traversal(root,res)
           return res
           
       
       def traversal(self,root,res):
           if root==None:
               return
           #左右中
           self.traversal(root.left,res)
           self.traversal(root.right,res)
           res.append(root.val)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
  • 相关阅读:
    【大话设计模式】策略模式
    Selenium4之CDP
    自动化测试用例的编写,只需要牢记7点,轻轻松松
    【FPGA教程案例45】图像案例5——基于FPGA的图像均值滤波verilog实现,通过MATLAB进行辅助验证
    lower_bound()与upper_bound()
    孔乙己脱不下的长衫:人工智能对学历的看法
    划分为k个相等的子集 -- 回溯算法应用
    【JUC】循环屏障CyclicBarrier详解
    【NOWCODER】- Python:循环语句(二)
    数据挖掘与分析课程笔记(目录)
  • 原文地址:https://blog.csdn.net/Lucky_main/article/details/125461718