首页 > 试题广场 >

二叉树的中序遍历

[编程题]二叉树的中序遍历
  • 热度指数:114343 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个二叉树的根节点root,返回它的中序遍历结果。

数据范围:树上节点数满足 ,树上每个节点的值满足 -1000 \le val \le 1000
进阶:空间复杂度 ,时间复杂度
示例1

输入

{1,2,#,#,3}

输出

[2,3,1]

说明

  
示例2

输入

{}

输出

[]
示例3

输入

{1,2}

输出

[2,1]

说明

  
示例4

输入

{1,#,2}

输出

[1,2]

说明

  

备注:
树中节点数目在范围 [0, 100] 内
树中的节点的值在[-100,100]以内

说明:本题目包含复杂数据结构TreeNode,点此查看相关信息
class Solution:
def inorderTraversal(self , root: TreeNode) -> List[int]:
# write code here
if root != None:
return self.inorderTraversal(root.left) + [root.val] + self.inorderTraversal(root.right)
return []
发表于 2025-07-11 17:32:21 回复(0)
class Solution:
    def inorderTraversal(self, root: TreeNode) -> list[int]:
        result = []
        current = root
        while current:
            mostRight = current.left
            # 左子树为空,访问当前结点,移到左子树
            if mostRight == None:
                result.append(current.val)
                current = current.right
            # 左子树不空,
            else:
                # 找到左子树的最右结点
                while mostRight.right and mostRight.right != current:
                    mostRight = mostRight.right
                # 最右结点的右指针空,将其指向当前结点,当前结点移到左子树
                if mostRight.right == None:
                    mostRight.right = current
                    current = current.left
                # 最右结点的右指针不空(指向当前结点),将其置空,访问当前结点,移到右子树
                else:
                    mostRight.right = None
                    result.append(current.val)
                    current = current.right
        return result
Morris遍历,37ms,5176kb
发表于 2025-03-14 15:25:32 回复(1)
class Solution:
    def inorderTraversal(self , root: TreeNode) -> List[int]:
        
        def dfs(root_dfs:TreeNode):
            if not root_dfs:
                return([])

            return(dfs(root_dfs.left)+[root_dfs.val]+dfs(root_dfs.right))

        return(dfs(root))


发表于 2024-08-08 15:14:57 回复(0)
class Solution:
    def inorderTraversal(self , root: TreeNode) -> List[int]:
        # write code here
        list=[]
        def tree(tre):
            if tre:
                tree(tre.left)
                list.append(tre.val)
                tree(tre.right)
        tree(root)
        return list

发表于 2024-01-08 16:00:47 回复(0)
class Solution:
    def inorderTraversal(self, root: TreeNode) -> List[int]:
        result = []  # 用于保存中序遍历的结果
        stack = []  # 辅助遍历的栈
        curr = root  # 当前节点初始化为根节点

        while curr is not None&nbs***bsp;len(stack) > 0:  # 循环条件:当前节点不为空 或者 栈不为空
            while curr is not None:  # 当前节点不为空时,将当前节点及其左子树节点入栈
                stack.append(curr)  # 将当前节点入栈
                curr = curr.left  # 将当前节点指向左子树节点

            curr = stack.pop()  # 弹出栈顶节点
            result.append(curr.val)  # 将弹出节点的值添加到结果列表中
            curr = curr.right  # 将当前节点指向弹出节点的右子树节点

        return result  # 返回中序遍历结果

发表于 2023-10-16 10:10:23 回复(0)
class Solution:
    res = []
    def inorderTraversal(self , root: TreeNode) -> List[int]:
        # 终止条件(当前节点为None,则停止查找)
        if root is None:
            return
        # 递归查找左节点(左节点同样为子树的根节点)
        self.inorderTraversal(root.left)
        if root != '#':
            self.res.append(root.val)
        # 递归查找右节点(右节点同样为子树的根节点)
        self.inorderTraversal(root.right)
        return self.res

发表于 2023-06-07 22:19:46 回复(0)
class Solution:
    nums = []
    def inorderTraversal(self , root: TreeNode) -> List[int]:
        # write code here
        if root == None:
            return None
        self.inorderTraversal(root.left)
        self.nums.append(root.val)
        self.inorderTraversal(root.right)
        return self.nums
发表于 2023-02-21 14:30:05 回复(0)