一、递归方式
思路:
1.如果root为null则返回0
2.比较根节点的左子树与右子树的高度,其中较大的树的高度+1为该树高度
/**
* 递归计算二叉树高度
*/
public int height(Node<E> node) {
if (node == null) return 0;
return 1 + Math.max(height1(node.left), height1(node.right));
}
二、迭代方式(层序遍历)
思路:
1.如果root为null,则返回0
2.如果树不为空,则定义变量height存储树的高度,变量levelSize存储每一层的元素数量,默认为1(root算1层)。定义队列,并将root放入后开始层序遍历二叉树
3.将头部元素取出、levelSize--、如果节点的左右节点不为空则放入队列、当levelSize为0则将队列的size赋值给levelSize且height++
java代码:
/**
* 迭代计算二叉树高度
*/
public int height() {
if(root == null) return 0;
//树的高度
int height = 0;
// 存储每一层的元素数量
int levelSize = 1;
Queue<Node<E>> queue = new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()) {
Node<E> node = queue.poll();
levelSize--;
if (node.left != null) {
queue.offer(node.left);
}
if (node.right != null) {
queue.offer(node.left);
}
if (levelSize == 0) { // 意味着即将要访问下一层
levelSize = queue.size();
height++;
}
}
return height;
}