zoukankan      html  css  js  c++  java
  • leetcode 226. Invert Binary Tree

    Invert a binary tree.

         4
       /   
      2     7
     /    / 
    1   3 6   9

    to

         4
       /   
      7     2
     /    / 
    9   6 3   1

    解法1:

    本质是输的先序遍历

    # 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 invertTree(self, root):
            """
            :type root: TreeNode
            :rtype: TreeNode
            """
            # invert self.left
            # invert self.right
            if not root: return None
            root.left, root.right = root.right, root.left
            self.invertTree(root.left)
            self.invertTree(root.right)
            return root        

    解法2,上述DFS的迭代解法:

    # 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 invertTree(self, root):
            """
            :type root: TreeNode
            :rtype: TreeNode
            """        
            if not root: return None
            stack = [root]
            while stack:
                node = stack.pop()
                node.left, node.right = node.right, node.left
                if node.right:
                    stack.append(node.right)
                if node.left:
                    stack.append(node.left)
            return root                    

    解法3,使用BFS:

    # 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 invertTree(self, root):
            """
            :type root: TreeNode
            :rtype: TreeNode
            """        
            if not root: return None
            nodes = [root]
            while nodes:
                nodes2 = []
                for node in nodes:
                    node.left, node.right = node.right, node.left
                    if node.left: nodes2.append(node.left)
                    if node.right: nodes2.append(node.right)
                nodes = nodes2
            return root                    
  • 相关阅读:
    AM3715/DM3730 更改内存大小后kernel boot不起来的解决办法
    xslt转换xml文档&&xslt call java方法
    VSCode 运行go test显示打印日志
    tomcat作为windows服务的参数配置,特别是PermSize的设置
    高亮显示web页表格行
    深入分析 Java 中的中文编码问题
    webwork和spring多配置文件的方法
    Bug笔记:诡异的$.ajax
    C#多态
    委托的本质
  • 原文地址:https://www.cnblogs.com/bonelee/p/8563696.html
Copyright © 2011-2022 走看看