leetcode-144-二叉树的前序遍历

---恢复内容开始---

题目描述:

方法一:递归

class Solution:
    def preorderTraversal(self, root: TreeNode) -> List[int]:
        res = []
        def helper(root):
            if not root:
                return
            res.append(root.val)
            helper(root.left)
            helper(root.right)
            
        helper(root)
        return res

 方法二:迭代

class Solution:
    def preorderTraversal(self, root: TreeNode) -> List[int]:
        res,stack = [],[root]
        if not root:
            return res
        while stack:
            node = stack.pop()
            res.append(node.val)
            if node.right:
                stack.append(node.right)
            if node.left:
                stack.append(node.left)
        return res

 另:莫里斯遍历

class Solution(object):
    def preorderTraversal(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        node, output = root, []
        while node:  
            if not node.left: 
                output.append(node.val)
                node = node.right 
            else: 
                predecessor = node.left 

                while predecessor.right and predecessor.right is not node: 
                    predecessor = predecessor.right 

                if not predecessor.right:
                    output.append(node.val)
                    predecessor.right = node  
                    node = node.left  
                else:
                    predecessor.right = None
                    node = node.right         

        return output

 

---恢复内容结束---

posted @ 2019-07-13 18:57  oldby  阅读(160)  评论(0编辑  收藏  举报