lintcode练习-175.翻转二叉树

描述

翻转一棵二叉树

您在真实的面试中是否遇到过这个题?  

样例

  1         1
 / \       / \
2   3  => 3   2
   /       \
  4         4

挑战

递归固然可行,能否写个非递归的?


#递归版本:

"""
Definition of TreeNode:
class TreeNode:
    def __init__(self, val):
        self.val = val
        self.left, self.right = None, None
"""


class Solution:
    """
    @param root: a TreeNode, the root of the binary tree
    @return: nothing
    """

    def invertBinaryTree(self, root):
        # write your code here
        self.traverse(root)
        return root

    def traverse(self, root):
        root.left, root.right = root.right, root.left
        if root.left: self.traverse(root.left)
        if root.right: self.traverse(root.right)
 
 



#非递归版本:

依然利用二叉树的层次遍历,在每一层进行翻转
"""
Definition of TreeNode:
class TreeNode:
    def __init__(self, val):
        self.val = val
        self.left, self.right = None, None
"""
class Solution:
    """
    @param root: a TreeNode, the root of the binary tree
    @return: nothing
    """
    def invertBinaryTree(self, root):
        # write your code here
        q = [root]
        while q:
            new_q = []
            for node in q:
                if node.right or node.left:
                    node.left, node.right = node.right, node.left
                if node.right:
                    new_q.append(node.right)
                if node.left:
                    new_q.append(node.left)
            q = new_q
        return  root
       

猜你喜欢

转载自blog.csdn.net/qq_36387683/article/details/80959770
今日推荐