美文网首页
55-二叉树的深度、平衡二叉树

55-二叉树的深度、平衡二叉树

作者: 一方乌鸦 | 来源:发表于2020-05-07 09:38 被阅读0次
  1. 输入一棵二叉树的根节点,求该树的深度。
    从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。
public class Solution {
    public int TreeDepth(TreeNode root) {
        if (root == null) return 0;
        return 1 + Math.max(TreeDepth(root.left), TreeDepth(root.right));
    }
}

还可以使用 按层序遍历,每遍历到一层,层数加1

class Solution {
    public int maxDepth(TreeNode root) {
        if(root == null) return 0;
        List<TreeNode> queue = new LinkedList<>() {{ add(root); }}, tmp;
        int res = 0;
        while(!queue.isEmpty()) {
            tmp = new LinkedList<>();
            for(TreeNode node : queue) {
                if(node.left != null) tmp.add(node.left);
                if(node.right != null) tmp.add(node.right);
            }
            queue = tmp;
            res++;
        }
        return res;
    }
}
  1. 输入一棵二叉树的根节点,判断该树是不是平衡二叉树。
    如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树

自上至下求深度时,可以用Map缓存

public class Solution {
    Map<TreeNode, Integer> map = new HashMap<>();
    public boolean IsBalanced_Solution(TreeNode root) {
        if (root == null) return true;
        int leftDeep = 0;
        int rightDeep = 0;
        if (map.containsKey(root.left)) {
            leftDeep = map.get(root.left);
        } else {
            leftDeep = getDeep(root.left);
        }
        if (map.containsKey(root.right)) {
            rightDeep = map.get(root.right);
        } else {
            rightDeep = getDeep(root.right);
        }
        return Math.abs(leftDeep - rightDeep) <= 1 && IsBalanced_Solution(root.left) && IsBalanced_Solution(root.right);
    }
    
    private int getDeep(TreeNode node) {
        if (node == null) return 0;
        int deep = 1 + Math.max(getDeep(node.left), getDeep(node.right));
        map.put(node, deep);
        return deep;
    }
}

相关文章

  • 判断平衡二叉树——Python

    给定一棵二叉树,判断它是否为平衡二叉树。 平衡二叉树的定义是:如果某二叉树中任意节点的左右子树的深度相差不超过1,...

  • 面试题55 - II. 平衡二叉树

    平衡二叉树 题目描述 输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差...

  • 【剑指Offer】039——平衡二叉树(树)

    题目 输入一棵二叉树,判断该二叉树是否是平衡二叉树 思路 平衡二叉树:某节点的左右子树深度差绝对值不超过1。利用递...

  • LeetCode110 平衡二叉树

    题目: 思路:平衡二叉树的条件:1.左子树是平衡二叉树2.右子树是平衡二叉树3.左右子树之间的深度不超过1 代码实现:

  • 二叉树的深度和平衡二叉树(LeetCode 剑指Offer 55

    题目 输入一棵二叉树的根节点,求该树的深度。输入一棵二叉树的根节点,判断该树是不是平衡二叉树。 二叉树的深度 解析...

  • 二叉树笔试面试题集合

    二叉树深度 判断平衡二叉树 一种方法 可以利用求二叉树深度,从根节点开始递归。再求左右深度进行比较。最后求到叶子节...

  • 平衡二叉树(AVL)

    定义 平衡二叉树是建立在二叉平衡树基础上,目的使得各个节点的深度尽可能小。平衡二叉树是一颗二叉树,或者为空,或者满...

  • 判断一个树是否是BST 求一棵平衡二叉树的最小深度 判断一棵二叉树是否高度平衡

  • 面试题55_2:判断是否是平衡二叉树

    输入一棵二叉树,判断该二叉树是否是平衡二叉树 思路一:递归求每个子节点的深度,遇到深度差超过1的即不满足条件,如果...

  • 判断二叉树是否平衡

    子树 平衡二叉树 判断是否为平衡二叉树 在遍历树的每个结点的时候,调用函数TreeDepth得到它的左右子树的深度...

网友评论

      本文标题:55-二叉树的深度、平衡二叉树

      本文链接:https://www.haomeiwen.com/subject/bqucghtx.html