/**
* public class TreeNode {
* public var val: Int
* public var left: TreeNode?
* public var right: TreeNode?
* public init(_ val: Int=0, _ left: TreeNode?=nil, _ right: TreeNode?=nil) {
* self.val = val
* self.left = left
* self.right = right
* }
*/
public class Solution {
func preorderTraversal ( _ root: TreeNode?) -> [Int] {
// write code here
var result: [Int] = [] // 存储遍历结果的数组
// 定义递归函数
func preorder(_ node: TreeNode?) {
// 处理空节点的情况
guard let node = node else { return }
// 前序遍历的三个步骤
result.append(node.val) // 第一步:访问根节点
preorder(node.left) // 第二步:遍历左子树
preorder(node.right) // 第三步:遍历右子树
}
preorder(root) // 开始遍历
return result
}
}
算法核心思想 :
前序遍历的顺序是:根节点 -> 左子树 -> 右子树。也就是说,对于任何一个节点,我们都要先访问该节点本身,然后再访问它的左子树,最后访问它的右子树。