zoukankan      html  css  js  c++  java
  • 对称的二叉树

    题目

    请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的

    思路

    在已学习的二叉树遍历中,都是先遍历左子树,最后遍历右子树,我们可以定义一种算法,先遍历父节点,再遍历左子树,最后遍历右子树,称这种算法为对称遍历算法

    • 如果前序遍历与对称遍历得到的序列相同,则二叉树为对称的(可以自行检测)
    • 考虑到某些结点只有左子树或右子树,则遍历时需要把nullptr考虑进去
    #include <iostream>
    using namespace std;
    
    struct tree
    {
        double data;
        struct tree *left,*right;
        tree(int d=0):data(d)
        {
            left=right=nullptr;
        }
    };
    class Solution
    {
        public:
            void create(tree *&root);
            void pre_order(const tree *root);
            bool is_symmetric();
            bool is_symmetric(const tree *r1,const tree *r2); 
            tree *root;    
    };
    void Solution::create(tree *&root)
    {
        double x;
        cin>>x;
        if(x==0)
            root=nullptr;
        else
        {
            root=new tree();
            root->data=x;
            create(root->left);
            create(root->right);
        }
    }
    void Solution::pre_order(const tree *root)
    {
        if(root)
        {
            cout<<root->data<<endl;
            pre_order(root->left);
            pre_order(root->right);
        }
    }
    bool Solution::is_symmetric()
    {
        return is_symmetric(root,root);
    }
    bool Solution::is_symmetric(const tree *r1,const tree *r2)
    {
        if(!r1&&!r2)
            return true;
        if(!r1||!r2)
            return false;
            
        if(r1->data!=r2->data)
            return false;
        return is_symmetric(r1->left,r2->right)&&is_symmetric(r1->right,r2->left);
    }
    int main()
    {
        Solution s;
        s.create(s.root);
        cout<<boolalpha<<s.is_symmetric()<<endl;
        
        return 0;
    }
  • 相关阅读:
    简单实现 C# 与 Javascript的兼容
    如何写好CSS系列之表单(form)
    D3、openlayers的一次尝试
    如何写好css系列之button
    mockjs,json-server一起搭建前端通用的数据模拟框架
    AIX中的/etc/inittab文件
    AIX中crontab和at 定时任务
    AIX中的服务管理
    AIX系统的备份和恢复
    AIX中磁带设备的使用
  • 原文地址:https://www.cnblogs.com/tianzeng/p/10180718.html
Copyright © 2011-2022 走看看