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;
}
Queue<TreeNode> queue = 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;
}