iOS实现反转二叉树

前言

Max Howell大家可能都知道,他是著名的HomeBrew的作者,却在面试谷歌时由于不会写反转二叉树被谷歌拒绝.所以笔者抱着学习的态度在LeetCode上找到了Max Howell那道很有名的反转二叉树题目,比较简单适合刚接触算法的开发者们,所以笔者用OC和Swift分别进行了实现.原题地址

题目:

Input:

      4
    /   \
   2     7
  / \   / \
 1   3 6   9

Output:

      4
    /   \
   7     2
  / \   / \
 9   6 3   1

首先分析下这个二叉树,从上往下看发现这个树是把树上的数据进行了交换,但是仔细一看发现最后一排的1-3反转过去后变成了3-1.所以得出结论,这道题是左右子树进行了交换,用函数递归就能很容易实现了.

知道了如何实现,直接看代码:

OC版本

声明节点属性

@interface TreeNode : NSObject
@property (nonatomic, assign) NSInteger val;
@property (nonatomic, strong) TreeNode *left;
@property (nonatomic, strong) TreeNode *right;
@end

实现代码:

- (void)exchangeNode:(TreeNode *)node {
    
    //判断是否存在node节点
    if(node) {
        //交换左右节点
        TreeNode *temp = node.left;
        node.left = node.right;
        node.right = temp;
    }

}

- (TreeNode *)invertTree:(TreeNode *)root
{
    //边界条件 递归结束或输入为空情况
    if(!root) {
       return root;
    }

    //递归左右子树
    [self invertTree:root.left];
    [self invertTree:root.right];
    //交换左右子节点
    [self exchangeNode:root];

    return root;
}
OC运行结果

Swift版本

节点

public class TreeNode {
   public var val: Int
   public var left: TreeNode?
   public var right: TreeNode?
   public init(_ val: Int) {
       self.val = val
       self.left = nil
       self.right = nil
  }
}

实现代码:

func invertTree(_ root: TreeNode?) -> TreeNode? {
    
    guard let root = root else {
        return nil
    }
    invertTree(root.left)
    invertTree(root.right)
    exchangeNode(root)
    
    return root; 
}

func exchangeNode(_ node: TreeNode?)  {
    
    if node != nil {
        let tmp = node?.left
        node?.left = node?.right
        node?.right = tmp
    }
}
Swift运行结果

总结

反转二叉树的题目也是算法中比较基础的题目,笔者在这里只是通过递归的方法进行实现,其他的方法大家可以自己研究下,欢迎讨论.另外笔者认为算法可能不会在实际开发中真正用到,但是却能锻炼开发者的思维能力,能更好的去分析解决问题,这也是为什么现在许多大公司都喜欢考算法题的原因吧.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    X先生_未知数的X阅读 15,960评论 3 119
  • “宝剑锋从磨砺出,梅花香自苦寒来。”这幅楹联,可以说是家喻户晓、人人皆知。 但是,此联流传多久无人知,何人所作无人...
    爲龍阅读 845评论 0 5
  • 2018.7.20 第227天 今天参加了一个父母课堂,我去的比较早,挑了第一排坐下。 老师讲的非常好,理论结合...
    鹃花开阅读 91评论 0 0
  • 嗨,又是我,人格和逼格同样健全的应崔·斯汀。 前一阵斯汀给大家做了个《大导演不完全装逼指南》,各位还看得过瘾不? ...
    Sir电影阅读 1,259评论 0 15
  • 你喜欢我吗我喜欢你 你说你有喜欢的人了爱不上其他人了 我说那算了我也不喜欢你了 喜欢和不喜欢不是说说的 我想和你浪...
    caizhifan阅读 285评论 0 1