leetcode-94 BinaryTree Inorder Traversal

145 阅读1分钟

递归方法:

class Solution {
    func inorderTraversal(_ root: TreeNode?) -> [Int] {
        var res:[Int] = [] 
        
        func travers(_ root: TreeNode?){
            guard let root = root else {return}
            travers(root.left)
            res.append(root.val)
            travers(root.right)
        }
        travers(root)
        return res
        
    }
}

非递归方法:

class InorderTraversal {
    func inorderTraversal(root: TreeNode?) -> [Int] {
        var stack = [TreeNode]()
        var res = [Int]()
        var node = root
        
        while !stack.isEmpty || node != nil {
            if node != nil {
                stack.append(node!)
                node = node!.left
            } else {
                node = stack.removeLast()
                res.append(node!.val)
                node = node!.right
            }
        }
        
        return res
    }
}