zoukankan      html  css  js  c++  java
  • 二叉树的创建、遍历、翻转

    BinaryTreeNode.h
    //
    //  BinaryTreeNode.h
    //  BinaryTree
    //
    //  Created by KeSen on 15/9/7.
    //  Copyright (c) 2015年 KeSen. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    
    @class BinaryTreeNode;
    
    @interface BinaryTreeNode : NSObject
    
    // 添加节点
    + (BinaryTreeNode *)addTree:(BinaryTreeNode *)p addValue:(id)value;
    
    // 中序遍历
    - (void)inOrderBinaryTree:(BinaryTreeNode *)p;
    
    // 翻转
    - (BinaryTreeNode *)invertTree:(BinaryTreeNode *)p;
    
    @end

    BinaryTreeNode.m
    //
    //  BinaryTreeNode.m
    //  BinaryTree
    //
    //  Created by KeSen on 15/9/7.
    //  Copyright (c) 2015年 KeSen. All rights reserved.
    //
    
    #import "BinaryTreeNode.h"
    
    @implementation BinaryTreeNode
    {
        id val;
        BinaryTreeNode *left;
        BinaryTreeNode *right;
    }
    
    // 添加节点
    + (BinaryTreeNode *)addTree:(BinaryTreeNode *)p addValue:(id)value {
        
        if (p == nil) {
            p = [[BinaryTreeNode alloc] init];
            p->val = value;
            p->left = nil;
            p->right = nil;
        
        } else if ([value integerValue] < [p->val integerValue]) {
        
            p->left = [BinaryTreeNode addTree:p->left addValue:value];
        } else {
            
            p->right = [BinaryTreeNode addTree:p->right addValue:value];
        }
        
        return p;
    }
    
    // 中序遍历二叉树
    - (void)inOrderBinaryTree:(BinaryTreeNode *)p {
        
        if (p != nil) {
            [self inOrderBinaryTree:p->left];
            printf("%ld
    ", (long)[p->val integerValue]);
            [self inOrderBinaryTree:p->right];
        }
    }
    
    - (BinaryTreeNode *)invertTree:(BinaryTreeNode *)p {
        
        if (p == nil) {
            return nil;
        }
        
        p->left = [p invertTree:p->left];
        p->right = [p invertTree:p->right];
        
        BinaryTreeNode *temp = p->left;
        p->left = p->right;
        p->right = temp;
        return p;
    }
    
    @end

    main.m
    //
    //  main.m
    //  BinaryTree
    //
    //  Created by KeSen on 15/9/7.
    //  Copyright (c) 2015年 KeSen. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    #import "BinaryTreeNode.h"
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            
            BinaryTreeNode *root = nil;
            for (id value in @[@(2), @(5), @(6), @(8), @(9)]) {
                root = [BinaryTreeNode addTree:root addValue:value];
            }
            
            [root inOrderBinaryTree:root];
            
            printf("
    ");
            
            BinaryTreeNode *invertTree = [root invertTree:root];
            [invertTree inOrderBinaryTree:invertTree];
        }
        return 0;
    }

    输出结果为:

    2

    5

    6

    8

    9

     

    9

    8

    6

    5

    2

     

    github:https://github.com/action456789/BinaryTree

     

    参考:http://blog.devtang.com/blog/2015/06/16/talk-about-tech-interview/

    http://www.cocoachina.com/bbs/read.php?tid=177907

  • 相关阅读:
    ubuntu实时显示网速cpu占用和内存占用率
    删除以....开头的所有文件
    0.0.....1 至 0.99.......9 之间正则
    引入腾讯视频播放,可控制是否暂停播放
    解决微信小程序textarea层级太高遮挡其他组件的问题
    查看某分支推送记录
    小程序下载canvas生成图片
    微信小程序企业付款到个人
    秒 转化为 时:分:秒 ------- 类似倒计时
    iOS--崩溃日志的格式化分析---格式化crash日志
  • 原文地址:https://www.cnblogs.com/actionke/p/4788406.html
Copyright © 2011-2022 走看看