Leetcode只二叉树中序遍历(python解法)

1.题目描述

示例 1:

复制代码
输入:root = [1,null,2,3]
输出:[1,3,2]

示例 2:

复制代码
输入:root = []
输出:[]

示例 3:

复制代码
输入:root = [1]
输出:[1]
2.解决方法:

中序遍历就是先遍历左子树然后遍历右子树

可以使用栈将左子树所有的根节点的val记录下来,然后在从底部网上遍历,这才是正确的书顺序

此时就可以加上左树和根,此时遍历右子树即可

栈方法:

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: OptionalTreeNode) -> Listint:

result = \[\] # 存放最终遍历结果

stack = \[\] # 显式栈,模拟递归调用栈

current = root # 当前正在处理的节点,从根开始

只要栈不为空,或者当前节点不为空,就继续循环

while stack or current:

一路向左,把路径上所有节点压入栈

while current:

stack.append(current)

current = current.left

此时 current 为 None,说明已到达最左叶子的左孩子(空)

弹出栈顶 ------ 这就是当前子树中"最左但未访问"的节点(即该子树的根)

current = stack.pop()

result.append(current.val) # 访问它(加入结果)

转向它的右子树(可能为空,也可能有内容)

current = current.right

return result

递归方法:

def inorderTraversal(root):

if not root: # 基础情况

return \[\]

left_list = inorderTraversal(root.left) # 递归处理左子树

right_list = inorderTraversal(root.right) # 递归处理右子树

return left_list + root.val + right_list

相关推荐
KaMeidebaby13 小时前
卡梅德生物技术快报|PD1 单克隆抗体定制配套 N 糖全谱质控开发
前端·人工智能·算法·数据挖掘·数据分析
8Qi813 小时前
LeetCode 235. 二叉搜索树的最近公共祖先(LCA)
算法·leetcode·二叉树·递归·二叉搜索树·lca·迭代
bIo7lyA8v14 小时前
算法稳定性分析中的随机扰动建模的技术8
算法
科研online14 小时前
基于多源数据和XGBoost-SHAP分析中国大陆绿地碳汇空间变异影响因素的非线性相关性与尺度差异
算法·学习方法
Cthy_hy14 小时前
拓扑排序超详解:原理 + Kahn 贪心算法
python·算法·贪心算法
三品吉他手会点灯15 小时前
C语言学习笔记 - 43.运算符与表达式 - 运算符1 - 运算符的分类和简单介绍
c语言·笔记·学习·算法
VkN2X2X4b15 小时前
算法复杂度的实验验证与误差分析的技术8
算法
其利天下技术15 小时前
风扇灯无刷电机自适应算法实战指南
算法·cocos2d·无刷电机自适应算法·bldc驱动自适应算法·其利无刷电机驱动算法
8Qi815 小时前
LeetCode 494:目标和(Target Sum)—— 题解 ✅
算法·leetcode·职场和发展·动态规划·01背包
hujinyuan2016016 小时前
2026年3月 中国电子学会青少年软件编程(Python)三级考试试卷 真题及答案
java·python·算法