平衡二叉树解题思路
题目:
给定一个二叉树,判断它是否是 平衡二叉树
示例 1:

输入:root = [3,9,20,null,null,15,7] 输出:true
示例 2:

输入:root = [1,2,2,3,3,null,null,4,4] 输出:false
示例 3:
输入:root = [] 输出:true
提示:
- 树中的节点数在范围
[0, 5000]内 -104 <= Node.val <= 104
思路:
判断二叉树的每个结点左右子树深度差是否大于一,如果是则返回-1;(getDepth函数)
代码:
/*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/
// 计算左右子树深度差值
int diffdepth(int l_depth,int r_depth){return l_depth > r_depth ? l_depth -r_depth : r_depth - l_depth;
}// 计算每个结点左右子树深度并判断差值是否大于1
int getDepth(struct TreeNode* root) {if(root == NULL){return 0;}int l_depth = getDepth(root -> left);int r_depth = getDepth(root -> right);// 当差值大与1,函数递归返回-1;if (l_depth == -1 || r_depth == -1 || diffdepth(l_depth,r_depth) > 1) {return -1;}if(l_depth >= r_depth){return l_depth + 1;}else{return r_depth + 1;}}总结:
通过求二叉树的最大深度得到每个结点的左右子树深度,再求差值是否大于一;
