一般在遍历树形结构的时候,存在两种思想

  1. 深度优先遍历
  2. 广度优先遍历

这次就先说一下深度优先遍历:
深度优先遍历,首先会尝试寻找最深的一个分支,它会按照一条分支走到最低端;

题目

给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。

分析

这道题目是一个很典型的深度优先遍历;但是如何实现深度优先遍历呢?

  1. 使用递归,将树的每一个节点作为方法的参数;此时在方法中,可以通过一个节点来获取该节点的左子节点和右子节点(如果存在的话…),然后比较两个子节点的深度,取较大的一个,返回该子节点的深度+1;
  2. 使用递归,取左子节点(右子节点)的子节点的深度;

在这个过程中,int leftDeepLevel = maxDepth(node.left);maxDepth方法又会向下执行,直到执行到叶子节点;

代码

  1. /**
  2. * Definition for a binary tree node.
  3. * public class TreeNode {
  4. * int val;
  5. * TreeNode left;
  6. * TreeNode right;
  7. * TreeNode(int x) { val = x; }
  8. * }
  9. */
  10. class Solution {
  11. public int maxDepth(TreeNode root) {
  12. if(root == null) {
  13. return 0;
  14. } else {
  15. int left = maxDepth(root.left);
  16. int right = maxDepth(root.right);
  17. return Math.max(left, right) + 1;
  18. }
  19. }
  20. }