leetcode11: 对称二叉树(101)、二叉树的最大深度(104)

1.对称二叉树

给定一个二叉树,检查它是否是镜像对称的。

leetcode11: 对称二叉树(101)、二叉树的最大深度(104)_第1张图片

思路:递归条件:1. 都为null返回true   2.一个不为null返回false     3. 对应的值不相等返回false

递归过程:判断头节点左右子树(A,B)相等?判断A的右节点等于B的左节点?   判断A的左节点等于B的右节点?

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

参考链接:https://leetcode-cn.com/problems/symmetric-tree/

2.二叉树的最大深度

给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

说明: 叶子节点是指没有子节点的节点。

leetcode11: 对称二叉树(101)、二叉树的最大深度(104)_第2张图片

思路:递归

/**
 * 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:
    int maxDepth(TreeNode* root) {
        if(root == NULL)
        {
            return 0;
        }
        int left = maxDepth(root->left) + 1;
        int right = maxDepth(root->right) + 1;
        return left > right ? left : right;
    }
};

思路:队列(层遍历、广度优先搜索)

/**
 * 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:
    int maxDepth(TreeNode* root) {
       if(root == NULL)
           return 0;
        deque que;
        que.push_back(root);
        int deep = 0;
        while(!que.empty())
        {
            deep++;
            int num = que.size();
            for(int i=0;ileft)
                    que.push_back(p->left);
                if(p->right)
                    que.push_back(p->right);
            }
        }
        return deep;
    }
};

参考链接:https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/

你可能感兴趣的:(对称二叉树(101),二叉树的最大深度(104))