C++实现高度平衡二叉树的判断
1. 二叉树的实现
struct TreeNode {
TreeNode() : m_val(0), m_left_node(NULL), m_right_node(NULL) { }
TreeNode(int val) : m_val(val), m_left_node(NULL), m_right_node(NULL) { }
TreeNode(int val, TreeNode* left_node, TreeNode* right_node) : m_val(val), m_left_node(left_node), m_right_node(right_node) { }
int m_val;
TreeNode* m_left_node;
TreeNode* m_right_node;
};
2. 判断逻辑-获取高度
int GetHeight(TreeNode* cur_node) {
if (!cur_node) return 0;
int left_height = GetHeight(cur_node->m_left_node);
if (left_height == -1) return -1;
int right_height = GetHeight(cur_node->m_right_node);
if (right_height == -1) return -1;
return std::abs(left_height - right_height) > 1 ? -1 : (1 + std::max(left_height, right_height));
}
3. 整体代码
#include <iostream>
#include <math.h>
struct TreeNode {
TreeNode() : m_val(0), m_left_node(NULL), m_right_node(NULL) { }
TreeNode(int val) : m_val(val), m_left_node(NULL), m_right_node(NULL) { }
TreeNode(int val, TreeNode* left_node, TreeNode* right_node) : m_val(val), m_left_node(left_node), m_right_node(right_node) { }
int m_val;
TreeNode* m_left_node;
TreeNode* m_right_node;
};
class Solution {
public:
bool Plan(TreeNode* root) {
return GetHeight(root) == -1 ? false : true;
}
int GetHeight(TreeNode* cur_node) {
if (!cur_node) return 0;
int left_height = GetHeight(cur_node->m_left_node);
if (left_height == -1) return -1;
int right_height = GetHeight(cur_node->m_right_node);
if (right_height == -1) return -1;
return std::abs(left_height - right_height) > 1 ? -1 : (1 + std::max(left_height, right_height));
}
void FreeSpace(TreeNode* root) {
if (!root) return;
if (root->m_left_node) FreeSpace(root->m_left_node);
if (root->m_right_node) FreeSpace(root->m_right_node);
delete root;
}
};
int main() {
TreeNode* root = new TreeNode(5, new TreeNode(6, new TreeNode(8), new TreeNode(9)), new TreeNode(7, NULL, NULL));
Solution solution;
std::cout << "res: " << solution.Plan(root) << std::endl;
solution.FreeSpace(root);
return 0;
}