0. 前言

简单记录

1. 正文

1.1 方法一

# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param root TreeNode类 
# @return int整型一维数组
#

class Solution:
    def preorderTraversal(self , root: TreeNode) -> List[int]:
        # write code here
        
        if not root: return []
        # 初始化stack
        stack = []
        # 输出列表
        res = [] 
        cur_node = root # 当前节点
        
        while(stack or cur_node):
            
            # 沿着当前节点的左分支一直走
            while cur_node:
                stack.append(cur_node)
                res.append(cur_node.val)
                cur_node = cur_node.left
                
            # 栈顶元素出栈
            node = stack.pop()
            cur_node = node.right
        return res

1.2 方法二

class Solution:
    def preorderTraversal(self , root: TreeNode) -> List[int]:
        # write code here
        
        if not root: return []
        # 初始化stack
        stack = []
        # 输出列表
        res = [] 
        stack.append(root)
        
        while(stack):
            
            cur_node = stack.pop() # 栈顶元素出栈
            res.append(cur_node.val)
            
            # 当前元素右节点不为空,入栈
            if cur_node.right:
                stack.append(cur_node.right)
            # 当前元素左节点不为空,入栈
            if cur_node.left:
                stack.append(cur_node.left)
                
        return res