144. 二叉树的前序遍历

给定一个二叉树,返回它的 前序 遍历。

示例:

输入: [1,null,2,3]  
   1
    \
     2
    /
   3 

输出: [1,2,3]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?

递归法

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def preorderTraversal(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        
        if not root:
            return []
        
        return [root.val] + self.preorderTraversal(root.left) + self.preorderTraversal(root.right)

迭代法

思路:

  • 使用辅助栈
  • 当根节点为空时,返回空列表,否则将根节点压入栈中
  • 栈顶弹出节点,将节点的值插入到结果列表中,检查弹出节点的左右节点是否为空,按照右,左的顺序压入栈中
# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def preorderTraversal(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        
        result, stack = [], []
        
        if not root:
            return result
        
        stack.append(root)
        
        while stack:
            curr_node = stack.pop()
            result.append(curr_node.val)
            if curr_node.right:
                stack.append(curr_node.right)
            
            if curr_node.left:
                stack.append(curr_node.left)
        
        return result
posted @ 2018-09-17 14:38  yuyin  阅读(114)  评论(0)    收藏  举报