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

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

作者: 果哥爸 | 来源:发表于2018-01-30 17:00 被阅读51次

    题目:

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

    思路:

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

    代码:

    树节点:

    #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];
            }
        }
    }
    

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/sdexzxtx.html