开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第19天,点击查看活动详情
- 树非常重要,其中二叉树天然的镜像结构使其非常适合用递归解决问题,面试考察也非常多,从这里入手以后,对后续的回溯非常有帮助。
- 后续计划加入B树,线段树,红黑树等其他较为复杂的树,但是面试考察极少。
二叉树
1.二叉树的遍历
- 在数据结构中已经做出较为详细的叙述,不再赘述。
2.二叉树的属性
2.1.对称二叉树
-
LeetCode 链接:leetcode.cn/problems/sy…
-
使用递归分别判断左右子树为空的情况,以及判断他们的值是否相等,递归的方式返回就可以了。
class Solution { public boolean isSymmetric(TreeNode root) { if(root == null) return true; return this.drive(root.left, root.right); } private boolean drive(TreeNode left, TreeNode right) { return (left == null && right == null) || ((left != null && right != null) && (left.val == right.val) && drive(left.left, right.right) && drive(left.right, right.left)); } }
2.2.二叉树的最大深度
-
LeetCode 链接:leetcode.cn/problems/ma…
-
这里,递归的层级是要默认加一的,在使用递归过程中,会隐式的忽略这种情况,所以要把层数加回来。
class Solution { public int maxDepth(TreeNode root) { return root == null ? 0 : Math.max(this.maxDepth(root.left), this.maxDepth(root.right)) + 1; } }