刷题平台:牛客网
题目
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
1.思路
可以是递归的方法,属于DFS(深度优先搜索);另一种方法是按照层次遍历,属于BFS(广度优先搜索)
5 TreeDepth(5)<br /> / \ / \<br /> 1 2 6 1 TreeDepath(1)<br /> \<br /> 7 TreeDepth(7)
2.代码
DFS
private class TreeNode {int val;TreeNode left, right;TreeNode(int val) {this.val = val;}}public int TreeDepth(TreeNode root) {if (root == null) {return 0;}int left = TreeDepth(root.left);int right = TreeDepth(root.right);return Math.max(left, right) + 1;}
class Solution {public:int depth(TreeNode *root) {if (root == nullptr) {return 0;}int left = depth(root->left);int right = depth(root->right);return max(left, right) + 1;}};
BFS
import java.util.LinkedList;import java.util.Queue;/*** <p>Description: </p>** @author yong.zhang* @version 1.0.0* @date 2020/4/30 8:18*/public class Solution {private class TreeNode {int val;TreeNode left, right;TreeNode(int val) {this.val = val;}}public int TreeDepth(TreeNode root) {if (root == null) {return 0;}Queue<TreeNode> queue = new LinkedList<>();int depth = 0;queue.add(root);while (!queue.isEmpty()) {int size = queue.size();depth += 1;for (int i = 0; i < size; ++i) {TreeNode node = queue.poll();if (node.left != null) {queue.add(node.left);}if (node.right != null) {queue.add(node.right);}}}return depth;}}
