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;
    }
  • 相关阅读:
    57. Insert Interval
    287. Find the Duplicate Number
    52. N-Queens II
    51. N-Queens
    151. Reverse Words in a String
    29. Divide Two Integers
    [POJ2104]K-th Number
    [JSOI2008]最大数
    [BZOJ3673&3674]可持久化并查集&加强版
    C++ STL rope介绍----可持久化平衡树
  • 原文地址:https://www.cnblogs.com/tianzeng/p/10180718.html
Copyright © 2011-2022 走看看