//
// Created by Mr.Hu on 2018/12/9.
//
// leetcode 110 balanced binary tree
//
// 平衡二叉树的理解:每个节点的左右子树高度相差不大于1,而每子树的高度为该树的最长路径
//
// 这个题目我在leetcode上提交了六七遍才顺利通过,而且最终通过的方法只打败了百分之五的方法,之所以前面错这么多次,是因为对于平衡二叉树的概念没有理解。
// 错误的理解和当时写的方法在code中已经给出了wrong method
//
// 下面讲一下另外一种已经通过,但是效率不高的方法。考虑到平衡二叉树判断的是每个节点左右子树的高度差,所以我们要取计算每个节点左右子树的高度,
// 然后进行比较。而以某个节点作为根节点的子树高度,是等于其左右子树中较大高度加一得到。
// 按照上面的思想,我们采用类似于DFS的方法,去遍历整棵树,从底向上计算每个节点作为根节点的子树高度,在计算高度之前,先判断其左右子树高度的差值,
// 如果差值大于1,则说明该子树不平衡,也就是整棵树不满足平衡的条件,结束判断。如果小于等于一,则取较大值加一作为以当前节点为根的子树高度。
// 具体的逻辑关系可以查看代码部分。
//
// 在上述方法中,我们需要取保存以某个节点作为根节点的子树高度,其实我们完全可以用递归的方法,递归的得到每个节点为根节点的高度;
// max(1+depth(root->left),1+depth(root->right));
// 在树这类的题目中,熟练使用递归方法是一种必备技能,而且能够帮助我们减少代码量。
//
1 |
|