先序
# 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 xianxu(self, root: Optional[TreeNode]) -> List[int]:
stack=[root]#利用栈存储
output=[]#输出的列表
if not root:#空树直接返回
return []
while stack:
node=stack.pop() #栈顶出栈
output.append(node.val) #输出列表存值
if node.right: #先存右节点,后出
stack.append(node.right)
if node.left: #后存左节点,先出
stack.append(node.left)
return output
中序
class Solution:
def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
stack=[]#利用栈存储
node=root #保存节点
output=[]#输出的列表
if not root:#空树直接返回
return []
while stack or node:
while node: #先保存当前节点,然后找左节点
stack.append(node)
node=node.left
node=stack.pop() #栈顶出栈
output.append(node.val) #输出列表存值
node=node.right #出栈后找当前右节点
return output
后序
# 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: Optional[TreeNode]) -> List[int]:
stack=[]#利用栈存储
node=root #保存节点
output=[]#输出的列表
if not root:#空树直接返回
return []
while stack or node:
while node: #先保存当前节点,然后找左节点
stack.append(node)
if node.left:
node=node.left
else:
node=node.right
node=stack.pop() #找到叶子节点,栈顶出栈
output.append(node.val) #输出列表存值
if stack and stack[-1].left==node: #如果栈顶为此时叶子节点的父亲节点,找父亲节点的右节点
node=stack[-1].right
else:
node=None
return output