树和递归(一)[leetcode]Balanced Binary Tree

结合leetcode上的一些题,谈谈自己对树和递归的一些看法。

递归对喜欢简短代码的人来说是一种福利,递归一般分为从上往下和从下往上两种递归方法,拿最经典的斐波那契数列来说,要求f(n)的值,可以从f(n)往下推,f(n-1),f(n-2)...,这种方式很直观,但由于重复计算相同元素,所以在时间复杂度上是指数型增长,就个人所知道的情况而言,从上往下的时间复杂度不会优于从下往上的时间复杂度,故遇到递归的问题时,首先考虑从下往上的解法,也就是从f(0),f(1),f(2)...反推到f(n)。

下面说说二叉树,二叉树最经典也是最多考点的就是二叉树的遍历和二叉搜索树了(BST),而二叉树大部分的题便是用的递归解法。

先看leetcode上的Balanced Binary Tree,题意是判断一个树是否为平衡树。最优思路是利用递归方法,从叶节点开始逐层返回左右树结点的高度,同时判断是否为平衡树,若不为平衡树,则返回-1,若为平衡树,则返回树的高度,附上源码:

public class Solution {
    public boolean isBalanced(TreeNode root) {
        if (checkHeight(root) == -1){
            return false;
        }else {
            return true;
        }
    }
    public int checkHeight(TreeNode root){
        if (root == null){
            return 0;
        }
        
        int leftHeight = checkHeight(root.left);
        if (leftHeight == -1){
            return -1;
        }
        
        int rightHeight = checkHeight(root.right);
        if (rightHeight == -1){
            return -1;
        }
        
        int heightDiff = leftHeight - rightHeight;
        if (Math.abs(heightDiff) > 1){
            return -1;
        }else {
            return Math.max(leftHeight,rightHeight) + 1;
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值