目录

  • 一、题目描述
  • 题目
  • 中序遍历介绍
  • 二、递归实现
  • 递归遍历过程
  • 实现代码
  • 三、迭代实现
  • 迭代遍历过程
  • 实现代码



一、题目描述

题目

给定一个二叉树的根节点 root ,返回它的 中序 遍历。

示例1:

python中序遍历二叉树非递归 二叉树中序遍历 python_leetcode

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

示例2:

输入:root = []
输出:[]

示例3:

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

中序遍历介绍

python中序遍历二叉树非递归 二叉树中序遍历 python_python中序遍历二叉树非递归_02

二、递归实现

递归遍历过程

1. 前序遍历其左子树;
2. 访问根节点;
3. 前序遍历其右子树;

然后就是一直递归下去,在访问到节点的时候,可以进行节点的相关处理,比如说简单的访问节点值。

实现代码

class Solution:
    def inorderTraversal(self, root: TreeNode) -> List[int]:
    	def inorder(root:TreeNode):
    		if not root:
    			return
    		inorder(root.left)
    		res.append(root.val)
    		inorder(root.right)
    	
    	res = []
    	inorder(root)
    	return res

复杂度分析

  • 时间复杂度:O(python中序遍历二叉树非递归 二叉树中序遍历 python_leetcode_03),其中 python中序遍历二叉树非递归 二叉树中序遍历 python_leetcode_03
  • 空间复杂度:O(python中序遍历二叉树非递归 二叉树中序遍历 python_leetcode_03),为递归过程中栈的开销,平均情况下为 O(python中序遍历二叉树非递归 二叉树中序遍历 python_算法_06),最坏情况下树呈现链状,为 O(python中序遍历二叉树非递归 二叉树中序遍历 python_leetcode_03)。

三、迭代实现

迭代遍历过程

a. 当遍历到一个结点时,就压栈,然后继续去遍历它的左子树;

b. 当左子树遍历完成后,从栈顶弹出栈顶元素(左子树最后一个元素)并访问它;

c. 最后按照当前指正的右孩子继续中序遍历,若没有右孩子,继续弹出栈顶元素。

实现代码

class Solution:
    def inorderTraversal(self, root: TreeNode) -> List[int]:
        if not root:
            return []
        res=[]
        stack=[]
        while stack or root:
            while root:
                stack.append(root)
                root=root.left
            if stack:
                tmp=stack.pop()
                res.append(tmp.val)
                root=tmp.right
        return res

复杂度分析

  • 时间复杂度:O(python中序遍历二叉树非递归 二叉树中序遍历 python_leetcode_03),其中 python中序遍历二叉树非递归 二叉树中序遍历 python_leetcode_03
  • 空间复杂度:O(python中序遍历二叉树非递归 二叉树中序遍历 python_leetcode_03),为递归过程中栈的开销,平均情况下为 O(python中序遍历二叉树非递归 二叉树中序遍历 python_算法_06),最坏情况下树呈现链状,为 O(python中序遍历二叉树非递归 二叉树中序遍历 python_leetcode_03)。

中序遍历的非递归过程也是利用了一个「栈」来实现,由于是中序遍历,那么首先要访问左孩子,进而一定要把每个子结构的根结点入栈,然后访问左孩子,弹出栈顶元素(访问根结点),再进行访问右孩子,访问右孩子的时候,继续将每个子结构的根结点入栈,然后访问左孩子…这样循环下去,直到栈为空或者指向的根结点为空。

动图位置:https://leetcode-cn.com/problems/binary-tree-preorder-traversal/solution/er-cha-shu-de-qian-xu-bian-li-by-leetcode-solution/