zoukankan      html  css  js  c++  java
  • lintcode :Invert Binary Tree 翻转二叉树

    题目:

    翻转一棵二叉树

    样例
      1         1
     /        / 
    2   3  => 3   2
       /       
      4         4
    
    挑战

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

    解题:

    递归比较简单,非递归待补充

    Java程序:

    /**
     * Definition of TreeNode:
     * public class TreeNode {
     *     public int val;
     *     public TreeNode left, right;
     *     public TreeNode(int val) {
     *         this.val = val;
     *         this.left = this.right = null;
     *     }
     * }
     */
    public class Solution {
        /**
         * @param root: a TreeNode, the root of the binary tree
         * @return: nothing
         */
        public void invertBinaryTree(TreeNode root) {
            // write your code here
            invertTree(root);
            
        }
        public TreeNode invertTree(TreeNode root){
            if( root ==null){
                return root;
            }
            TreeNode rleft= root.left;
            root.left = invertTree(root.right);
            root.right = invertTree(rleft);
            return root;
        }
    }
    View Code

    总耗时: 994 ms

    Python程序:

    """
    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.invertTree(root)
            
        def invertTree(self,root):
            if root == None:
                return root
            rlft = root.left
            root.left = self.invertTree(root.right)
            root.right = self.invertTree(rlft)
            return root 
    View Code

    总耗时: 118 ms

    参考剑指OfferP127改进了下程序,更容易理解了

    /**
     * Definition of TreeNode:
     * public class TreeNode {
     *     public int val;
     *     public TreeNode left, right;
     *     public TreeNode(int val) {
     *         this.val = val;
     *         this.left = this.right = null;
     *     }
     * }
     */
    public class Solution {
        /**
         * @param root: a TreeNode, the root of the binary tree
         * @return: nothing
         */
        public void invertBinaryTree(TreeNode root) {
            // write your code here
            invertTree(root);
        }
        public void invertTree(TreeNode root){
            if( root ==null){
                return;
            }
            if(root.left == null && root.right ==null){
                return;
            }
            TreeNode tmp= root.left;
            root.left = root.right;
            root.right = tmp;
            if(root.left!=null){
                invertTree(root.left);
            }
            if(root.right!=null){
                invertTree(root.right);
            }
        }
    }
    Java Code
     
    """
    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
            if root == None:
                return
            if root.left==None and root.right ==None:
                return
            tmp = root.left
            root.left = root.right
            root.right = tmp
            if root.left!=None:
                self.invertBinaryTree(root.left)
            if root.right!=None:
                self.invertBinaryTree(root.right)
    Python Code
  • 相关阅读:
    [刷题] 1016 部分A+B (15分)
    [刷题] 1022 D进制的A+B (20分)
    [刷题] 1021 个位数统计 (15分)
    [刷题] 1020 月饼 (25分)
    洛谷&BZOJ [POI2016]Korale
    反演魔术---二项式反演
    毒瘤养成记1: 如何卡hash
    多项式全家桶
    [CQOI]排序机械臂
    后缀自动机感性理解
  • 原文地址:https://www.cnblogs.com/bbbblog/p/4889550.html
Copyright © 2011-2022 走看看