有一棵二叉树,其中所有节点的值都不一样,找到含有节点最多 的搜索二叉子树,并返回这棵子树的头节点.
1 /* 2 struct TreeNode { 3 int val; 4 struct TreeNode *left; 5 struct TreeNode *right; 6 TreeNode(int x) : 7 val(x), left(NULL), right(NULL) { 8 } 9 };*/ 10 class MaxSubtree { 11 public: 12 TreeNode* getMax(TreeNode* root) { 13 // write code here 14 int max, min, num; // 二叉搜索树的最小值,最大值,节点数 15 return max_node_subtree(root, max, min, num); 16 } 17 18 TreeNode* max_node_subtree(TreeNode* root, int& maxVal, int& minVal, int&num){ 19 if(root == NULL){ 20 maxVal = INT_MIN; 21 minVal = INT_MAX; 22 num = 0; 23 return NULL; 24 } 25 26 int lmax, lmin, lnum; 27 TreeNode* lnode = max_node_subtree(root->left, lmax, lmin, lnum); 28 int rmax, rmin, rnum; 29 TreeNode* rnode = max_node_subtree(root->right, rmax, rmin, rnum); 30 31 maxVal = max(rmax,root->val);// 更新最大值 32 minVal = min(lmin,root->val);// 更新最小值 33 34 if(lmax<root->val && rmin>root->val && lnode==root->left && rnode==root->right){ 35 num = lnum+rnum+1;// 更新节点个数 36 return root;// 返回头节点 37 } 38 39 if(lnum>rnum){// 说明不满足上面的条件 选择左右节点中较多节点的子树更新节点个数 40 num = lnum; 41 return lnode; 42 }else{ 43 num = rnum; 44 return rnode; 45 } 46 } 47 48 49 };