剑指 Offer 28. 对称的二叉树(递归/并且或者要考虑好)

简介: 剑指 Offer 28. 对称的二叉树(递归/并且或者要考虑好)

orz,没有思路,有了思路还是错的


递归:

可以仿照归并排序,我这么觉得 两边判断,如果不是当我没说

递归停止的条件是什么? 结束条件

左节点和右节点都为空 -> 倒底了都长得一样 ->true

左节点为空的时候右节点不为空,或反之 -> 长得不一样-> false

左右节点值不相等 -> 长得不一样 -> false


要想两棵树镜像对称,那么A树左边要和B树右边镜像,A树右边要和B树左边镜像我们才能说这两棵树是镜像的 递归条件

调用递归函数传入左左和右右

调用递归函数传入左右和右左


调用递归函数,我们想知道它的左右孩子是否镜像,传入的值是root的左孩子和右孩子。

/**
 * 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) {
        if(root == NULL)
            return true;
        else
            return double_isSymmetric(root->left,root->right); 
    }
    bool double_isSymmetric(TreeNode* left_,TreeNode* right_){
        if(left_ == NULL && right_ == NULL)
        {
            return true;
        }
        if(left_ == NULL || right_ == NULL) //her 写错了 不能写它不等于空或者它不等于空
        {
            return false;
        }
        if(left_->val != right_->val)
        {
            return false;
        }
        return double_isSymmetric(left_->left,right_->right) && double_isSymmetric(left_->right,right_->left);
    }
        // queue <TreeNode*> q;
        // // TreeNode *p = new TreeNode();
        // q.push(root);
        // while(!q.empty())
        // {
        //     int m = q.size();
        //     vector<int> v;
        //     while(m--)
        //     {
        //         if(q.front()->left!=NULL)
        //         {
        //             q.push(q.front()->left);
        //         }
        //         if(q.front()->right!=NULL)
        //         {
        //             q.push(q.front()->right);
        //         }
        //         if(q.)
        //         v.push_back(q.front()->val);
        //         q.pop();
        //     }
        //     for(int i = 0;i < v.size()/2;i++)
        //     {
        //         if(v[i] != v[v.size()-i-1])
        //         {
        //             return false;
        //         }
        //     }
        // }
        // return true;
    // }
};
相关文章
|
7月前
剑指 Offer 26:树的子结构
剑指 Offer 26:树的子结构
47 1
|
7月前
剑指 Offer 34:二叉树中和为某一值的路径
剑指 Offer 34:二叉树中和为某一值的路径
37 0
|
7月前
剑指 Offer 28:对称的二叉树
剑指 Offer 28:对称的二叉树
26 0
|
7月前
剑指 Offer 33:二叉搜索树的后序遍历序列
剑指 Offer 33:二叉搜索树的后序遍历序列
35 0
|
7月前
LeetCode 剑指 Offer 28. 对称的二叉树
LeetCode 剑指 Offer 28. 对称的二叉树
32 0
力扣 剑指 Offer 28. 对称的二叉树
力扣 剑指 Offer 28. 对称的二叉树
54 0
|
算法
图解LeetCode——剑指 Offer 34. 二叉树中和为某一值的路径
图解LeetCode——剑指 Offer 34. 二叉树中和为某一值的路径
70 1
图解LeetCode——剑指 Offer 26. 树的子结构
图解LeetCode——剑指 Offer 26. 树的子结构
76 0
图解LeetCode——剑指 Offer 26. 树的子结构
图解LeetCode——剑指 Offer 28. 对称的二叉树
图解LeetCode——剑指 Offer 28. 对称的二叉树
84 0