📜  二叉树的高度 (1)

📅  最后修改于: 2023-12-03 15:36:03.583000             🧑  作者: Mango

二叉树的高度

二叉树是指每个节点最多有两个子节点的树结构,其中一个为左子节点,一个为右子节点。而二叉树的高度指的是二叉树中从根节点到最远叶子节点的最长路径的长度,也就是树的最大深度。

计算二叉树高度的算法
递归算法

最常见的计算二叉树高度的方法就是使用递归算法,其具体实现如下:

public int getHeight(Node root) {
    if (root == null) {
        return 0;
    }
    int leftHeight = getHeight(root.left);
    int rightHeight = getHeight(root.right);
    return Math.max(leftHeight, rightHeight) + 1;
}

以上代码中,getHeight是计算二叉树高度的方法,它通过递归的方式遍历左子树和右子树,并返回其中高度较大的那个值加1,因为一旦遍历到底部的叶子节点时,递归就开始返回到其父节点,每次返回时高度+1,因此最后计算得到的高度就是根节点的高度。

迭代算法

迭代算法也可以计算二叉树高度,其实现方式如下:

public int getHeight(Node root) {
    if (root == null) {
        return 0;
    }
    
    int height = 0;
    Queue<Node> queue = new LinkedList<>();
    queue.offer(root);
    
    while (!queue.isEmpty()) {
        int size = queue.size();
        while (size > 0) {
            Node node = queue.poll();
            size--;
            if (node.left != null) {
                queue.offer(node.left);
            }
            if (node.right != null) {
                queue.offer(node.right);
            }
        }
        height++;
    }
    return height;
}

以上代码中使用了队列(LinkedList实现),从根节点开始遍历二叉树,每一层节点都遍历完后,高度+1,直到所有节点都出队结束才能得到最终的高度值。

时间复杂度和空间复杂度
  • 递归算法的时间复杂度为O(n),空间复杂度为O(h)(h为树的高度)。
  • 迭代算法的时间复杂度为O(n),空间复杂度为O(w)(w为队列中存放的节点数,即树的宽度)。
总结

计算二叉树高度是二叉树操作中比较基础的一个操作,很多其他的操作都需要基于此操作实现。使用递归算法和迭代算法都可以很容易地计算出二叉树的高度,使用时需要视具体情况而定,可根据树的规模大小、空间复杂度要求等因素进行选择。