递归方法(判断二叉树是否是对称二叉树)

递归的函数要干什么?
函数的作用是判断传入的两个树是否镜像。
输入:TreeNode left, TreeNode right
输出:是:true,不是:false
递归停止的条件是什么?
左节点和右节点都为空 -> 倒底了都长得一样 ->true
左节点为空的时候右节点不为空,或反之 -> 长得不一样-> false
左右节点值不相等 -> 长得不一样 -> false
从某层到下一层的关系是什么?
要想两棵树镜像,那么一棵树左边的左边要和二棵树右边的右边镜像,一棵树左边的右边要和二棵树右边的左边镜像
调用递归函数传入左左和右右
调用递归函数传入左右和右左
只有左左和右右镜像且左右和右左镜像的时候,我们才能说这两棵树是镜像的
调用递归函数,我们想知道它的左右孩子是否镜像,传入的值是root的左孩子和右孩子。这之前记得判个root==null。

/**
 * 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 ChildEquation(TreeNode *root1,TreeNode *root2){
    
    
        if(root1==NULL && root2 == NULL){
    
    
            return true;
        }
        if(root1 == NULL || root2 == NULL){
    
    
            return false;
        }
        return root1->val == root2->val && ChildEquation(root1->left,root2->right) 
         && ChildEquation(root1->right,root2->left);
    }
    bool isSymmetric(TreeNode* root) {
    
    
        if(root == NULL){
    
    
            return true;
        }
        return ChildEquation(root->left,root->right);
    }
};

猜你喜欢

转载自blog.csdn.net/qq_43964318/article/details/120354195