leetcode代码记录(二叉树递归遍历

简介: leetcode代码记录(二叉树递归遍历

1. 题目:

示例 1:

输入:root = [1,null,2,3]

输出:[1,2,3]

示例 2:

输入:root = []

输出:[]

示例 3:

输入:root = [1]

输出:[1]

示例 4:

输入:root = [1,2]

输出:[1,2]

示例 5:

输入:root = [1,null,2]

输出:[1,2]

2. 前序遍历

# 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]:
        # 结果
        result = []

        # 递归函数
        def preorder(node):
            if node == None:
                return
            result.append(node.val)
            preorder(node.left)
            preorder(node.right)
        
        preorder(root)

        return result

3. 中序遍历

# 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]:
        # 结果
        result = []

        # 递归函数
        def inorder(node):
            if node == None:
                return
            inorder(node.left)
            result.append(node.val)
            inorder(node.right)
        
        inorder(root)

        return result

4. 后序遍历

# 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]:
        # 结果
        result = []

        # 递归函数
        def postorder(node):
            if node == None:
                return
            postorder(node.left)
            postorder(node.right)
            result.append(node.val)
        
        postorder(root)

        return result

5. 算法原理

  1. 确定终止条件:在节点为空时终止
  2. 搞明白每个遍历的:添加中间节点值、跳转左节点(递归)、跳转右节点(递归),的顺序。

前序遍历是:中左右

中序遍历是:左中右

后序遍历是:左右中

目录
相关文章
|
4天前
|
机器学习/深度学习
leetcode代码记录(旋转图像
leetcode代码记录(旋转图像
9 0
|
4天前
|
算法
leetcode代码记录(全排列 II
leetcode代码记录(全排列 II
13 4
|
4天前
|
算法
leetcode代码记录(全排列
leetcode代码记录(全排列
12 1
|
4天前
|
索引
leetcode代码记录(Z 字形变换
leetcode代码记录(Z 字形变换
11 1
|
4天前
leetcode代码记录(最长回文子串
leetcode代码记录(最长回文子串
9 2
|
4天前
leetcode代码记录(回文数
leetcode代码记录(回文数
12 1
|
4天前
|
算法
leetcode代码记录(寻找两个正序数组的中位数
leetcode代码记录(寻找两个正序数组的中位数
13 2
|
4天前
leetcode代码记录(两数之和
leetcode代码记录(两数之和
11 1
|
4天前
|
索引
leetcode代码记录(最长公共子序列
leetcode代码记录(最长公共子序列
7 0
|
4天前
|
索引
leetcode代码记录(最长重复子数组
leetcode代码记录(最长重复子数组
12 0
http://www.vxiaotou.com