二叉树节点:
struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode() : val(0), left(nullptr), right(nullptr) {} TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} };
计算二叉树高度
int treeHeight(TreeNode *node) { if(node == nullptr) return 0; int left = treeHeight(node->left); //cout << "left:" << left << endl; int right = treeHeight(node->right); //cout << "right" << right << endl; return max(left, right) + 1; }
判断是否为平衡二叉树(左右子树高度差小于等于1)
// 判定左右子树是否是平衡的 -1不平衡 int balance(TreeNode * node) { if(node == nullptr) return 0; int left = balance(node->left); if(left == -1) return -1; int right = balance(node->right); if(right == -1) return -1; return abs(left - right) > 1 ? -1 : 1+max(left, right); }