美文网首页
【剑指Offer学习】【面试题19 :二叉树的镜像】

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

作者: 果哥爸 | 来源:发表于2018-01-30 17:00 被阅读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;
    }
    

    相关文章

      网友评论

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

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