【剑指Offer学习】【面试题19 :二叉树的镜像】

2018-01-30  本文已影响10人  果哥爸

题目:

请完成一个函数,输入一个二叉树,该函数输出它的镜像。

思路:

先前序遍历这棵树的每个结点,如果遍历到的结点有子结点,就交换它的两个子结点。当交换完所有非叶子结点的左右子结点之后,就得到了树的镜像。

代码:

树节点:

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

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

void mirrorBinaryTree (NSBinaryTreeNode *binaryTreeNode) {
    
    if (binaryTreeNode == nil) {
        return;
    }
    
    NSBinaryTreeNode *tmpTreeNodel = binaryTreeNode.left;
    binaryTreeNode.left = binaryTreeNode.right;
    binaryTreeNode.right = tmpTreeNodel;
    
    mirrorBinaryTree(binaryTreeNode.left);
    
    mirrorBinaryTree(binaryTreeNode.right);
}

// 中序  遍历 打印
void printBinaryTree (NSBinaryTreeNode *headerTreeNode) {
    if (headerTreeNode != nil) {
        printBinaryTree(headerTreeNode.left);
        NSLog(@"%@ ", headerTreeNode.value);
        printBinaryTree(headerTreeNode.right);
    }
}


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

        //       8
        //    /    \
        //   6     10
        //  / \   / \
        // 5   7 9  11
        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);
        mirrorBinaryTree(root);
        printBinaryTree(root);
    }
    return 0;
}
上一篇下一篇

猜你喜欢

热点阅读