一般在遍历树形结构的时候,存在两种思想
- 深度优先遍历
- 广度优先遍历
这次就先说一下深度优先遍历:
深度优先遍历,首先会尝试寻找最深的一个分支,它会按照一条分支走到最低端;
题目
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
分析
这道题目是一个很典型的深度优先遍历;但是如何实现深度优先遍历呢?
- 使用递归,将树的每一个节点作为方法的参数;此时在方法中,可以通过一个节点来获取该节点的左子节点和右子节点(如果存在的话…),然后比较两个子节点的深度,取较大的一个,返回该子节点的深度+1;
- 使用递归,取左子节点(右子节点)的子节点的深度;
在这个过程中,int leftDeepLevel = maxDepth(node.left);maxDepth方法又会向下执行,直到执行到叶子节点;
代码
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*/class Solution {public int maxDepth(TreeNode root) {if(root == null) {return 0;} else {int left = maxDepth(root.left);int right = maxDepth(root.right);return Math.max(left, right) + 1;}}}
