# 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
我的想法大致流程就是:
- (while) 一路进入左子树 (同时其父结点进栈),直到看到左叶结点并记录进 result 为止
- 把当前结点的 val 记录进 result
- (while) 一路取出栈里面没有右孩子的结点,边取边记录 val
- 结点有右孩子时,如果是叶结点就记录进 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
力扣的测试感觉不太准,多次测试波动有点大