输入一棵二叉树,求该树的深度。
思路:
第一种采用递归算法;
第二种采用非递归算法:采用层次遍历的思想,每次遍历一层,深度加1;关键是用count记录每一层遍历到了第几个元素,nextCount表示这一层一共有多少个元素,当count==nextCount时,树的深度加1;
第一种思想:
public int TreeDepth(TreeNode root) {
if (root == null) {
return 0;
}
int leftDepth = TreeDepth(root.left) + 1;
int rightDepth = TreeDepth(root.right) + 1;
return leftDepth > rightDepth ? leftDepth : rightDepth;
}
第二种思想:
public int TreeDepth2(TreeNode root) {
if (root == null) {
return 0;
}
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.add(root);
// count代表层次遍历时,遍历到了这一层的第几个元素,nextCount记录着这一层的所有结点个数
int depth = 0, count = 0, nextCount = queue.size();
while (!queue.isEmpty()) {
TreeNode node = queue.poll();
count++;
if (node.left != null) {
queue.add(node.left);
}
if (node.right != null) {
queue.add(node.right);
}
if (count == nextCount) {
depth++;
count = 0;
nextCount = queue.size();
}
}
return depth;
}