Leetcode Link: 144. 二叉树的前序遍历 - 力扣(LeetCode) (leetcode-cn.com)
题目
给你二叉树的根节点 root ,返回它节点值的 前序 遍历。
解法一
思路:递归求解。对递归序进行操作。可以思考利用全局变量怎么操作,利用局部变量怎么操作
题解: 不使用全局变量的话,需要汇总子树的信息进行操作,在汇总的时候考虑顺序
class Solution:
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
def recur(cur):
if not cur:
return []
node_list = [cur.val]
left = recur(cur.left)
right = recur(cur.right)
node_list.extend(left)
node_list.extend(right)
return node_list
if not root:
return []
else:
return recur(root)如果使用全局变量话,可能会稍微好理解一点,跟左成云课上讲的一样,在固定的位置进行操作即可(这个方法整体上都不如上一个方法)
class Solution:
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
if not root:
return []
self.node_list = []
self.recur(root)
return self.node_list
def recur(self, cur):
if not cur:
return
self.node_list.append(cur.val)
self.recur(cur.left)
self.recur(cur.right)解法二
先序遍历_
创建一个栈,首先把根节点放进去,然后每次:
- 从栈中弹出一个节点
cur- 打印(处理)该节点
cur- 把
cur的右孩子压到栈里去,再把cur的左孩子压到栈里去- 重复 1-3 步
建议画图体会一下
指向原始笔记的链接 class Solution: def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]: if not root: return [] stack = [] stack.append(root) output = [] while(len(stack)>0): cur = stack.pop() output.append(cur.val) if cur.right: stack.append(cur.right) if cur.left: stack.append(cur.left) return output
解法三
思路: todo mioors 遍历
题解: