zoukankan      html  css  js  c++  java
  • 编写代码判断两棵二叉树是否为镜像二叉树 镜像二叉树举例:

    编写代码判断两棵二叉树是否为镜像二叉树
    镜像二叉树举例:

       a              a
     b   c    ==>   c   b
    d                    d

    下面是将一个树转化为镜像二叉树

    void swap(struct BiTree** a, struct BiTree** b)  //交换将左右子树交换
    {
        struct BiTree* temp = NULL;
        temp = *a;
        *a = *b;
        *b = temp;
    }

    struct BiTree* mirrorTree(struct BiTree* root)  
    {
        if (root == NULL)
        {
            return NULL;
        }

        if (root->left != NULL)  //递归到左子树最深处,
        {
            root->left = mirrorTree(root->left);  //运用递归
        }

        if (root->right != NULL)    //递归到又子树最深处
        {
            root->right = mirrorTree(root->right);//运用递归
        }

        swap(&root->left, &root->right);//  //将左右节点交换
        return root;
    }

    简洁高效的算法:

     一直递归,判断是否相等,递归完左子树再递归右子树

     易懂的算法:

    struct BiTree
    {
        int data;
        struct BiTree* left;
        struct BiTree* right;
    };

    bool isMirrorTree(struct BiTree* a, struct BiTree* b)
    {
        if (a == NULL && b == NULL)
        {
            return true;
        }

        if (a == NULL && b != NULL)
        {
            return false;
        }

        if (a != NULL && b == NULL)
        {
            return false;
        }

        if (a->data != b->data)
        {
            return false;
        }

        if (a->right != NULL)
        {
            if (b->left != NULL)
            {
                if (!isMirrorTree(a->right, b->left))
                {
                    return false;
                }
            }
            else
            {
                return false;
            }
        }

        if (a->left != NULL)
        {
            if (b->right != NULL)
            {
                if (!isMirrorTree(a->left, b->right))
                {
                    return false;
                }
            }
            else
            {
                return false;
            }
        }

        return true;
    }

  • 相关阅读:
    字符串初始化、查找字符+获取字符
    冒泡排序
    JAVA中值类型和引用类型的不同?
    二维数组初始化,属性,遍历,输出各元素总和。
    数组定义属性遍历循环,输出最大数
    for穷举,叠代练习
    HTML--Boby部分之<a>标签
    HTML--Boby内标签之多行文本及下拉框
    HTML--Boby部分Input之重置
    HTML--Boby部分Input之上传文件
  • 原文地址:https://www.cnblogs.com/txzing/p/13957962.html
Copyright © 2011-2022 走看看