leetcode-590. N叉樹的后序遍歷(OC)

N叉樹的后序遍歷

地址:https://leetcode-cn.com/problems/n-ary-tree-postorder-traversal/

 給定一個 n 叉樹的根節(jié)點 root 宏浩,返回 其節(jié)點值的 后序遍歷 贼穆。

 n 叉樹 在輸入中按層序遍歷進行序列化表示肺蔚,每組子節(jié)點由空值 null 分隔(請參見示例)。

 示例 1:
 輸入:root = [1,null,3,2,4,null,5,6]
 輸出:[5,6,3,2,4,1]
 
 示例 2:
 輸入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
 輸出:[2,6,14,11,7,3,12,8,4,13,9,10,5,1]

使用OC 我們需要創(chuàng)建一個BinaryTreeNode節(jié)點model 里面的對象如下

/**
 *  值
 */
@property (nonatomic, assign) NSInteger value;

/**
 * N節(jié)點
 */
@property (nonatomic, strong) NSArray <BinaryTreeNode *> *dataArray;

遞歸

很簡單 上代碼吧

- (NSArray *)postorder1:(BinaryTreeNode *)root
{
    if (root == nil) {
        return @[];
    }
    
    NSMutableArray *values = [NSMutableArray array];
    
    for (BinaryTreeNode *node in root.dataArray) {
        
        NSArray *dataArray = [self postorder1:node];
        
        [values addObjectsFromArray:dataArray];
    }
    
    [values addObject:@(root.value)];
    
    return values;
}

迭代

- (NSArray *)postorder2:(BinaryTreeNode *)root
{
    /*
     重點是 加入數(shù)組 取出最后一個
     每次值都加入到數(shù)組的第0個
     */
    
    if (root == nil) {
        return @[];
    }
    
    NSMutableArray *values = [NSMutableArray array];

    NSMutableArray *dataArray = [NSMutableArray array];
    [dataArray addObject:root];
    
    while (dataArray.count > 0) {
        
        BinaryTreeNode *node = [dataArray lastObject];
        [dataArray removeLastObject];

        for (BinaryTreeNode *node1 in node.dataArray) {
            [dataArray addObject:node1];
        }
        
        [values insertObject:@(node.value) atIndex:0];
    }
    
    return values;
}

驗證

{
        /*
         輸入:root = [1,null,3,2,4,null,5,6]
         輸出:[1,3,5,6,2,4]
         */
        
        BinaryTreeNode *node1 = [[BinaryTreeNode alloc] init];
        node1.value = 1;
        
        BinaryTreeNode *node2 = [[BinaryTreeNode alloc] init];
        node2.value = 3;
        
        BinaryTreeNode *node3 = [[BinaryTreeNode alloc] init];
        node3.value = 2;
        
        BinaryTreeNode *node4 = [[BinaryTreeNode alloc] init];
        node4.value = 4;
        
        node1.dataArray = @[node2, node3, node4];
        
        
        BinaryTreeNode *node5 = [[BinaryTreeNode alloc] init];
        node5.value = 5;
        
        BinaryTreeNode *node6 = [[BinaryTreeNode alloc] init];
        node6.value = 6;
        
        node2.dataArray = @[node5, node6];

        NSArray *arr1 = [self postorder1:node1];
        NSLog(@"arr1 is %@",arr1);
        
        NSArray *arr2 = [self postorder2:node1];
        NSLog(@"arr2 is %@",arr2);
    }
    
    {
        /*
         輸入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
         輸出:[1,2,3,6,7,11,14,4,8,12,5,9,13,10]
         */
        
        BinaryTreeNode *node1 = [[BinaryTreeNode alloc] init];
        node1.value = 1;
        
        BinaryTreeNode *node2 = [[BinaryTreeNode alloc] init];
        node2.value = 2;
        
        BinaryTreeNode *node3 = [[BinaryTreeNode alloc] init];
        node3.value = 3;
        
        BinaryTreeNode *node4 = [[BinaryTreeNode alloc] init];
        node4.value = 4;
        
        BinaryTreeNode *node5 = [[BinaryTreeNode alloc] init];
        node5.value = 5;
        
        node1.dataArray = @[node2, node3, node4, node5];
        
        
        BinaryTreeNode *node6 = [[BinaryTreeNode alloc] init];
        node6.value = 6;
        
        BinaryTreeNode *node7 = [[BinaryTreeNode alloc] init];
        node7.value = 7;
        
        node3.dataArray = @[node6, node7];

        
        BinaryTreeNode *node8 = [[BinaryTreeNode alloc] init];
        node8.value = 8;
        
        node4.dataArray = @[node8];

        
        BinaryTreeNode *node9 = [[BinaryTreeNode alloc] init];
        node9.value = 9;
        
        BinaryTreeNode *node10 = [[BinaryTreeNode alloc] init];
        node10.value = 10;
        
        node5.dataArray = @[node9, node10];

        
        BinaryTreeNode *node11 = [[BinaryTreeNode alloc] init];
        node11.value = 11;
        
        node7.dataArray = @[node11];

        
        BinaryTreeNode *node12 = [[BinaryTreeNode alloc] init];
        node12.value = 12;
        
        node8.dataArray = @[node12];

        
        BinaryTreeNode *node13 = [[BinaryTreeNode alloc] init];
        node13.value = 13;
        
        node9.dataArray = @[node13];

        
        BinaryTreeNode *node14 = [[BinaryTreeNode alloc] init];
        node14.value = 14;
        
        node11.dataArray = @[node14];

        
        NSArray *arr1 = [self postorder1:node1];
        NSLog(@"arr1 is %@",arr1);
        
        NSArray *arr2 = [self postorder2:node1];
        NSLog(@"arr2 is %@",arr2);
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末开镣,一起剝皮案震驚了整個濱河市殴蹄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蜘欲,老刑警劉巖益眉,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異姥份,居然都是意外死亡郭脂,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門澈歉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來展鸡,“玉大人,你說我怎么就攤上這事埃难∮ū祝” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵涡尘,是天一觀的道長忍弛。 經(jīng)常有香客問我,道長考抄,這世上最難降的妖魔是什么细疚? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮川梅,結(jié)果婚禮上疯兼,老公的妹妹穿的比我還像新娘。我一直安慰自己贫途,他們只是感情好吧彪,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著潮饱,像睡著了一般来氧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上香拉,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天啦扬,我揣著相機與錄音,去河邊找鬼凫碌。 笑死扑毡,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的盛险。 我是一名探鬼主播瞄摊,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼勋又,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了换帜?” 一聲冷哼從身側(cè)響起楔壤,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎惯驼,沒想到半個月后蹲嚣,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡祟牲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年隙畜,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片说贝。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡议惰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出乡恕,到底是詐尸還是另有隱情言询,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布傲宜,位于F島的核電站倍试,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蛋哭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一涮母、第九天 我趴在偏房一處隱蔽的房頂上張望谆趾。 院中可真熱鬧,春花似錦叛本、人聲如沸沪蓬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽跷叉。三九已至,卻和暖如春营搅,著一層夾襖步出監(jiān)牢的瞬間云挟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工转质, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留园欣,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓休蟹,卻偏偏與公主長得像沸枯,于是被迫代替她去往敵國和親日矫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容