LeetCode开心刷题四十六天——101夜 Symmetric Tree

美人为了不被恶魔吃掉,就给他讲了一个又一个的故事,一直讲了一千零一夜,后来魔鬼终于困了。姑娘 用发丝勒死了魔鬼。然后姑娘发现,每到晚上,自己的手就会长出鳞片,白天又会消失。

101. Symmetric Tree
Easy
265057FavoriteShare

Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).

For example, this binary tree [1,2,2,3,4,4,3] is symmetric:

    1
   / \
  2   2
 / \ / \
3  4 4  3

 

But the following [1,2,2,null,3,null,3] is not:

    1
   / \
  2   2
   \   \
   3    3

BONUS:
在C++中点和箭头的区别,之前写过,现在再复习下
In one word:
指针就用箭头,不然就是点

不同点:点运算符( . )的左边操作数是一个结果为结构的表达式;
              箭头运算符( -> )的左边的操作数是一个指向结构体的指针。

例如:


typedef struct // 定义一个结构体类型:DATA
{
char key[10]; // 结构体成员:key
char name[20]; // 结构体成员:name
int age; // 结构体成员:age
}DATA;

DATA data; // 声明一个结构体变量
DATA *pdata; // 声明一个指向结构体的指针

// 访问数据操作如下:
data.age = 24; // 结构体变量通过点运算符( . )访问
pdata->age = 24; // 指向结构体的指针通过箭头运算符( -> )访问
解法主要是主函数很难写:

首先,类里的函数输入是指针,所以必须有一个指向树的指针

但是树在构建过程中不是指针所以左右子树赋值方式在不停变换

另外结构体自身有初始化方式,要用结构体自定义的方式赋值才能建树

 

#include <iostream>
#include<vector>
#include<string>
#include<iterator>
# include<cstdlib>
using namespace std;
/**
Definition for a binary tree node.
*/
struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

class Solution {
public:
    bool isSymmetric(TreeNode* root) {
        return isMirror(root,root);
    }
    bool isMirror(TreeNode* root1,TreeNode* root2){
        if(!root1&&!root2)
            return true;
        if(!root1||!root2)
            return false;
        return root1->val==root2->val&&isMirror(root1->left,root2->right)&&isMirror(root1->right,root2->left);
    }
};
int main()
{
    Solution s1;
    TreeNode T1(1);
    TreeNode T2(2);
    //T2->val=2;
    TreeNode T3(2);
    //T3->val=2;
    TreeNode T4(3);
    //T4->val=3;
    TreeNode T5(4);
    //T5->val=4;
    TreeNode T6(4);
    //T6->val=4;
    TreeNode T7(3);
    //T7->val=3;
    TreeNode* root=&T1;
    root->left=&T2;
    root->right=&T3;
    T2.left=&T4;
    T2.right=&T5;
    T3.left=&T6;
    T3.right=&T7;
    cout<<s1.isSymmetric(root)<<endl;
}

 

 

 

转载于:https://www.cnblogs.com/Marigolci/p/11582169.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值