Leetcode 二叉树的最大深度以及平衡二叉树

文章目录

  • 二叉树的最大深度
    • 题目描述
    • 具体代码
      • 1.递归写法
      • 2.精简版的递归写法
      • 3.利用层序遍历
  • 平衡二叉树
    • 题目描述
    • 具体代码


二叉树的最大深度

题目描述

输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。

示例
给定二叉树 [3,9,20,null,null,15,7]
Leetcode 二叉树的最大深度以及平衡二叉树_第1张图片
返回它的最大深度 3 。

具体代码

1.递归写法

代码如下(示例):

/**
 * 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 getDepth(TreeNode* node){
        if (node == NULL) return 0;
        int leftdepth = getDepth(node -> left);
        int rightdepth = getDepth(node -> right);
        int depth = max(leftdepth,rightdepth) + 1;
        return depth;
    }
    int maxDepth(TreeNode* root) {
        return getDepth(root);
    }
};

2.精简版的递归写法

代码如下(示例):

class Solution {
public:
    int maxDepth(TreeNode* root) {
        if (root == NULL) return 0;
        return 1 + max(maxDepth(root->left), maxDepth(root->right));
    }
};

3.利用层序遍历

代码如下(示例):

class Solution {
public:
    int maxDepth(TreeNode* root) {
        queue<TreeNode*> que;
        if (root == NULL) return 0;
        if (root != NULL) que.push(root);
        int level = 0;
        while (que.empty() == false){
            int size = que.size();
            for (int i = 0; i < size; i++){
                TreeNode* tem = que.front();
                que.pop();
                if (tem -> left != NULL) que.push(tem -> left);
                if (tem -> right != NULL) que.push(tem -> right);
            }
            level++;
        }
        return level;
    }
};

平衡二叉树

题目描述

给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。

示例1
Leetcode 二叉树的最大深度以及平衡二叉树_第2张图片

输入:root = [3,9,20,null,null,15,7]
输出:true

示例2
Leetcode 二叉树的最大深度以及平衡二叉树_第3张图片

输入:root = [1,2,2,3,3,null,null,4,4]
输出:false

具体代码

class Solution {
public:
    int getheight(TreeNode* node){
        if (node == nullptr) return 1;
        int leftheight = getheight(node -> left);
        int rightheight = getheight(node -> right);
        int height = max(leftheight,rightheight) + 1;
        return height;
    }

    bool isBalanced(TreeNode* root) {
        if (root == nullptr) return true;
        else return abs(getheight(root -> left)-getheight(root -> right)) <= 1 && isBalanced(root -> left) && isBalanced(root -> right);
    }
};

你可能感兴趣的:(二叉树,二叉树,leetcode)