版权声明:长风原创 https://blog.csdn.net/u012846486/article/details/80059884
Node *GetMaxSubBST(Node *root) {
if (root == NULL)
return NULL;
int tree_size = 0; // 最大搜索树的节点个数
int max_value = 0; // 记录root树中最大的节点值
int min_value = 0;
return PostOrder(root, tree_size, max_value, min_value);
}
Node *PostOrder(Node *root, int& tree_size, int& max_value, int& min_value) {
if (root == NULL) {
tree_size = 0;
max_value = INT_MIN;
max_value = INT_MAX;
return NULL;
}
max_value = root->value;
min_value = root->value;
int l_tree_size = 0;
int l_max_value = 0;
int l_min_value = 0;
Node *left_bst_root = PostOrder(root->left, l_tree_size, l_max_value, l_min_value);
max_value = max(max_value, l_max_value);
min_value = min(min_value, l_min_value);
int r_tree_size = 0;
int r_max_value = 0;
int r_min_value = 0;
Node *right_bst_root = PostOrder(root->right, r_tree_size, r_max_value, r_min_value);
max_value = max(max_value, r_max_value);
min_value = min(min_value, r_min_value);
if (left_bst_root == root->left && right_bst_root == root->right
&& l_max_value < root->value && root->value < r_min_value)
{
tree_size = l_tree_size + r_tree_size + 1;
return root;
}
return l_tree_size > r_tree_size ? left_bst_root : right_bst_root;
}