zoukankan      html  css  js  c++  java
  • 二叉树的镜像

    题目

    请完成一个函数,输入一个二叉树,该函数输出它的镜像。例如下图所示,左图是原二叉树,而右图则是该二叉树的镜像

    思路

    1. 先序遍历原二叉树的每个节点,如果遍历到的结点有子结点,就交换它的两个子结点。
    2. 递归遍历每个节点的子节点,同样,如果遍历到的子节点有子节点,就交换它的两个子节点。

      当交换完所有非叶子结点的左右子结点之后,就得到了树的镜像

    /*
    struct TreeNode {
        int val;
        struct TreeNode *left;
        struct TreeNode *right;
        TreeNode(int x) :
                val(x), left(NULL), right(NULL) {
        }
    };*/
    class Solution {
    public:
        //先序
        void Mirror(TreeNode *root) {
            if(root==nullptr)
                return ;
            if(root->left==nullptr&&root->right==nullptr)
                return ;
            
            TreeNode *tmp=root->left;
            root->left=root->right;
            root->right=tmp;
            
            if(root->left)
                Mirror(root->left);
            if(root->right)
                Mirror(root->right);
            return ;
        }
    };
    
    /*
    struct TreeNode {
        int val;
        struct TreeNode *left;
        struct TreeNode *right;
        TreeNode(int x) :
                val(x), left(NULL), right(NULL) {
        }
    };*/
    class Solution {
    public:
        //后序
        void Mirror(TreeNode *root) {
            if(root==nullptr)
                return ;
            if(root->left==nullptr&&root->right==nullptr)
                return ;
    
            if(root->left)
                Mirror(root->left);
            if(root->right)
                Mirror(root->right);
            
            TreeNode *tmp=root->left;
            root->left=root->right;
            root->right=tmp;
            return ;
        }
    };

     判断一棵二叉树是不是对称二叉树

    /*
    struct TreeNode {
        int val;
        struct TreeNode *left;
        struct TreeNode *right;
        TreeNode(int x) :
                val(x), left(NULL), right(NULL) {
        }
    };
    */
    class Solution {
    public:
        bool isSymmetrical(TreeNode* root)
        {
            if(!root)
                return true;
            return isSymmetricalCore(root->left,root->right);
        }
    private:
        bool isSymmetricalCore(TreeNode *left,TreeNode *right)
        {
            if(!left&&!right)
                return true;
            else if(!left||!right)
                return false;
            return left->val==right->val&&
                   isSymmetricalCore(left->left,right->right)&&isSymmetricalCore(left->right,right->left);
        }
    };
  • 相关阅读:
    Java 实现 HDFS 文件基本操作
    [git] branch 分支操作
    Java基本语法-----java流程控制语句
    Java基本语法-----java运算符的优先级与结合性
    Java基本语法-----java数据类型的转换
    CSDN发表文章后老是待审核的原因
    Java基本语法-----java变量
    Java基本语法-----java进制的转换
    Java基本语法-----java常量
    Java基本语法-----java注释
  • 原文地址:https://www.cnblogs.com/tianzeng/p/10180449.html
Copyright © 2011-2022 走看看