算法专题——树01

57 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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;
        }
    }