本文共 868 字,大约阅读时间需要 2 分钟。
1. 递归
public int TreeDepth(TreeNode root) { if (root == null) // 空树,高度为0 return 0; int leftDepth = TreeDepth(root.left); // 左子树高度 int rightDepth = TreeDepth(root.right); // 右子树高度 // 树的最大高度为子树最大高度加上根结点 if (leftDepth > rightDepth) return leftDepth + 1; else return rightDepth + 1; }
2. 层次遍历
public int TreeDepth(TreeNode pRoot) { if (pRoot == null) { return 0; } Queuequeue = new LinkedList<>(); queue.add(pRoot); // 根结点如队列 int depth = 0, ncount = 0, nextCount = 1; // 队列不为空 while (queue.size() != 0) { TreeNode top = queue.poll(); // 出队列一个元素 ncount++; // 如果有左孩子,左孩子入队列 if (top.left != null) queue.add(top.left); // 如果有右孩子, 右孩子入队列 if (top.right != null) queue.add(top.right); // 表示遍历完了一层 if (ncount == nextCount) { nextCount = queue.size(); // 下一层的结点个数 ncount = 0; depth++; } } return depth; }