题解 | #二叉树的前序遍历#
二叉树的前序遍历
https://www.nowcoder.com/practice/5e2135f4d2b14eb8a5b06fab4c938635
# 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 # """ # method_1: 根左右, 递归 # """ # rst = list() # self.preorder(rst, root) # return rst # pass # def preorder(self, tre_:List[int], root: TreeNode): # if root == None: # return # tre_.append(root.val) # self.preorder(tre_, root.left) # self.preorder(tre_, root.right) def preorderTraversal(self, root: TreeNode) -> List[int]: """ method_2: 使用非递归的方法进行 二叉树前序遍历 步骤: step1: 判断树是否为空, 空树不遍历 step2: 准备辅助栈, 首先记录根节点 step3: 每次从栈中弹出一个元素,进行访问,然后验证该节点的左右子节点是否存在,存在就加入栈中,有限加入右节点 """ rsta = list() tmp_stack = list() if root == None: return [] tmp_stack.append(root) while (tmp_stack): node = tmp_stack[-1] tmp_stack.pop() rsta.append(node.val) if node.right: tmp_stack.append(node.right) if node.left: tmp_stack.append(node.left) return rsta pass 二叉树的递归调用和非递归调用,应该熟读,会背