力扣 二叉树中序遍历 (非递归) Python

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right

测试系统已经定义好了结点,结点值是 int 类型,如果没有 L/R,其值为 None 而不是样例给的 null

我的想法大致流程就是:

  1. (while) 一路进入左子树 (同时其父结点进栈),直到看到左叶结点并记录进 result 为止
  2. 把当前结点的 val 记录进 result
  3. (while) 一路取出栈里面没有右孩子的结点,边取边记录 val
  4. 结点有右孩子时,如果是叶结点就记录进 result,不是就作为下一次循环的访问点
class Solution(object):
    def inorderTraversal(self, root):
        stack, result, visit = [], [], root
        while visit:
            # 存在左孩子时
            while visit.left:
                # 左孩子 -> 叶结点
                if isinstance(visit.left, int):
                    result.append(visit.left)
                # 左孩子 -> 子树
                else:
                    # 当前结点进栈,访问左孩子
                    stack.append(visit)
                    visit = visit.left
            # 访问根结点
            result.append(visit.val)
            # 栈不为空、访问的结点无右孩子
            while stack and not visit.right:
                visit = stack.pop()
                result.append(visit.val)
            # 右孩子 -> 叶结点
            if isinstance(visit.right, int):
                result.append(visit.right)
            # 右孩子 -> 子树
            else:
                visit = visit.right
        return result

力扣的测试感觉不太准,多次测试波动有点大

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荷碧TongZJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值