反转二叉树

原创 2016年05月30日 21:46:56
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public TreeNode invertTree(TreeNode root) {
        if (root == null) {
            return null;
        }
        root.left = invertTree(root.left);
        root.right = invertTree(root.right);
        TreeNode tmp = root.left;
        root.left = root.right;
        root.right = tmp;
        return root;
    }
}

object-c实现:

递归方式:

/** 
 * 翻转二叉树(又叫:二叉树的镜像) 
 *
 * @param rootNode 根节点
 *
 * @return 翻转后的树根节点(其实就是原二叉树的根节点) 
 */
 + (BinaryTreeNode *)invertBinaryTree:(BinaryTreeNode *)rootNode {
    if (!rootNode) {  
        return nil; 
    } 
    if (!rootNode.leftNode & !rootNode.rightNode) {
        return rootNode; 
    } 
    [self invertBinaryTree:rootNode.leftNode];
    [self invertBinaryTree:rootNode.rightNode]; 
    BinaryTreeNode *tempNode = rootNode.leftNode; 
    rootNode.leftNode = rootNode.rightNode;
    rootNode.rightNode = tempNode; 
    return rootNode;
  }

非递归方式:

+ (BinaryTreeNode *)invertBinaryTree:(BinaryTreeNode *)rootNode {
    if (!rootNode) {  
        return nil; 
    }
    if (!rootNode.leftNode & !rootNode.rightNode) {  
        return rootNode; 
    }
    NSMutableArray *queueArray = [NSMutableArray array]; //数组当成队列
    [queueArray addObject:rootNode]; //压入根节点
    while (queueArray.count > 0) {
        BinaryTreeNode *node = [queueArray firstObject];
        [queueArray removeObjectAtIndex:0]; //弹出最前面的节点,仿照队列先进先出原则
        BinaryTreeNode *pLeft = node.leftNode;
        node.leftNode = node.rightNode;
        node.rightNode = pLeft;

        if (node.leftNode) {
            [queueArray addObject:node.leftNode];
        }
        if (node.rightNode) {
            [queueArray addObject:node.rightNode];
        }
    }
    return rootNode;
}

[数据结构][Leetcode]翻转二叉树

1.问题描述Invert a binary tree.For example: to Google: 90% of our engineers use the software you wr...
  • u014359097
  • u014359097
  • 2015年12月08日 22:16
  • 1441

翻转二叉树(递归与非递归)

翻转一棵二叉树样例 1 1 / \ / \ 2 3 => 3 2 / \ 4 4 递归版本先翻转左子树,后翻转右子树,然...
  • zwhlxl
  • zwhlxl
  • 2015年08月12日 06:47
  • 2830

反转二叉树----java实现

实现二叉树的反转 示例: 原二叉树: 4 / \ 2 7 / \ / \ 1 3 6 9 反转后的二叉树: 4 / \ 7 ...
  • Emira_J
  • Emira_J
  • 2016年04月26日 14:50
  • 2207

C++程序设计实现反转二叉树

  • 2009年11月14日 23:18
  • 4KB
  • 下载

图算法之如何反转一颗二叉树

一个题目难倒一个英雄好汉。这个题目曾让Homebrew的作者失去了一次进入Google工作的机会。在这里,我们不讨论是非,只聊技术!我个人认为,算法和数据结构还是要懂一点的。因为算法和数据结构不仅能解...
  • hexudong08
  • hexudong08
  • 2016年05月13日 17:34
  • 1842

反转二叉树

反转二叉树,因为Max Howell(Homebrew,mac版的apt-get作者 )出名: Google: 90% of our engineers use the software you w...
  • bitcarmanlee
  • bitcarmanlee
  • 2016年05月30日 16:01
  • 2527

java 反转二叉树算法

题目:Invert a binary tree. 4 / \ 2 7 / \ / \ 1 3 6 9to 4 / \ 7 2 ...
  • diu_brother
  • diu_brother
  • 2016年03月16日 00:07
  • 2830

翻转二叉树 - C++

class Solution { public: /** * @param root: a TreeNode, the root of the binary tree * ...
  • zx8225885qw
  • zx8225885qw
  • 2017年04月23日 18:28
  • 273

翻转二叉树(C++)

用递归的方法翻转二叉树
  • light_bo
  • light_bo
  • 2015年06月25日 21:39
  • 2253

反转二叉树,哈哈

这个问题因为前段时间一个大牛工程师Max Howell面试谷歌都火了,后来这家伙去了苹果。。我也不知道说什么了,谷姑娘把人家活生生的给拒了。 我今天也试着写了一下,递归版本的很easy的就写了出来。...
  • u013220338
  • u013220338
  • 2015年10月09日 14:25
  • 984
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:反转二叉树
举报原因:
原因补充:

(最多只允许输入30个字)