【剑指Offer学习】【面试题23:从上往下打印二叉树】

题目:

从上往下打印出二叉树的每个结点,同一层的结点按照从左向右的顺序打印。

思路:

从上到下打印二叉树的规律:每一次打印一个结点的时候,如果该结点有子结点, 则把该结点的子结点放到一个队列的末尾。接下来到队列的头部取出最早进入队列的结点,重复前面的打印操作,直至队列中所有的结点都被打印出来为止。

代码:

树节点:

#import <Foundation/Foundation.h>
// 树节点
@interface NSBinaryTreeNode : NSObject
// 值
@property (nonatomic, strong) NSString *value;
// 左节点
@property (nonatomic, strong) NSBinaryTreeNode *left;
// 右节点
@property (nonatomic, strong) NSBinaryTreeNode *right;
@end

逻辑代码:

int main(int argc, const char * argv[]) {
    @autoreleasepool {

        NSBinaryTreeNode *root = [NSBinaryTreeNode new];
        root.value = @"8";
        root.left = [NSBinaryTreeNode new];
        root.left.value = @"6";
        root.left.left = [NSBinaryTreeNode new];
        root.left.left.value = @"5";
        root.left.right = [NSBinaryTreeNode new];
        root.left.right.value = @"7";
        root.right = [NSBinaryTreeNode new];
        root.right.value = @"10";
        root.right.left = [NSBinaryTreeNode new];
        root.right.left.value = @"9";
        root.right.right = [NSBinaryTreeNode new];
        root.right.right.value = @"11";
        
        printBinaryTree(root);
    }
    return 0;
}

#import "NSBinaryTreeNode.h"
#import <Foundation/Foundation.h>

void printBinaryTree (NSBinaryTreeNode *headerNode){
    if (headerNode == nil) {
        return;
    }
    
    NSMutableArray *tmpNodeArray = [NSMutableArray array];
    [tmpNodeArray addObject:headerNode];
    
    while (tmpNodeArray.count != 0) {
        NSBinaryTreeNode *tmpNode = tmpNodeArray[0];
        NSLog(@"%@", tmpNode.value);
        [tmpNodeArray removeObject:tmpNode];
        
        if (tmpNode.left != nil) {
            [tmpNodeArray addObject:tmpNode.left];
        }
        
        if (tmpNode.right != nil) {
            [tmpNodeArray addObject:tmpNode.right];
        }
    }
}

推荐阅读更多精彩内容

  • 数据结构和算法--二叉树的实现 几种二叉树 1、二叉树 和普通的树相比,二叉树有如下特点: 每个结点最多只有两棵子...
    sunhaiyu阅读 4,586评论 0 14
  • 题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 代码实现 主要思路 1、从上到下按层打印二叉树,...
    _minimal阅读 979评论 0 1
  • 说明: 本文中出现的所有算法题皆来自牛客网-剑指Offer在线编程题,在此只是作为转载和记录,用于本人学习使用,不...
    秋意思寒阅读 805评论 1 1
  • (一)如果知乎上有人提问「有一对恩爱到不管孩子的爹妈是怎样的体验」,林卉一定会大笔一挥“谢邀”二字,然后洋洋洒洒个...
    奇妙脆阅读 94评论 0 2
  • 尘积堕叶黄,溪过春苔翠。一道东风一道雨,惯叹花残悔。 高歌深深情,痛饮涟涟泪。半赋青春半赋命,好劝蹉跎辈。 201...
    深蓝色木鱼阅读 130评论 1 2