● 110.平衡二叉树 ● 257. 二叉树的所有路径 ● 404.左叶子之和
● 110.平衡二叉树
1.思路
方法一:递归
可以用迭代实现 但我没看懂
此题既然要求比较高度,必然是要后序遍历。
求深度应用前序遍历
递归三步曲分析:
1.明确递归函数的参数和返回值
参数:当前传入节点。 返回值:以当前传入节点为根节点的树的高度。
那么如何标记左右子树是否差值大于1呢?
如果当前传入节点为根节点的二叉树已经不是二叉平衡树了,还返回高度的话就没有意义了。
所以如果已经不是二叉平衡树了,可以返回-1 来标记已经不符合平衡树的规则了。
2.明确终止条件
递归的过程中依然是遇到空节点了为终止,返回0,表示当前节点为根节点的树高度为0
3.明确单层递归的逻辑
如何判断以当前传入节点为根节点的二叉树是否是平衡二叉树呢?当然是其左子树高度和其右子树高度的差值。
分别求出其左右子树的高度,然后如果差值小于等于1,则返回当前二叉树的高度,否则返回-1,表示已经不是二叉平衡树了。
此时递归的函数就已经写出来了,这个递归的函数传入节点指针,返回以该节点为根节点的二叉树的高度,如果不是二叉平衡树,则返回-1。
方法二:迭代法
没看
2.代码实现
递归法
class Solution {
private int getheight(TreeNode root){
if(root==null)
return 0;
int leftheight=getheight(root.left);
if(leftheight==-1)
return -1;
int rightheight=getheight(root.right);
if(rightheight==-1)
return -1;
if(Math.abs(leftheight-rightheight)>1)
return -1;
else