#include "Tree.h"
using namespace std;
Node* posOrder(Node* head, int* record)
{
if(head == nullptr)
{
record[0] = 0;
record[1] = INT_MAX;
record[2] = INT_MIN;
return nullptr;
}
int value = head->value;
Node* left = head->left;
Node* right = head->right;
Node* LBST = posOrder(left, record);
int lSize = record[0];
int lMax = record[2];
int lMin = record[1];
Node* RBST = posOrder(right, record);
int rSize = record[0];
int rMax = record[2];
int rMin = record[1];
record[1] = min(lMin, value);
record[2] = max(value, rMax);
if(left == LBST && right == RBST && value > lMax && value < rMin)
{
record[0] = lSize + rSize + 1;
return head;
}
record[0] = max(lSize, rSize);
return lSize > rSize ? LBST : RBST;
}
Node* biggest(Node* head)
{
int record[3];
return posOrder(head, record);
}
int main()
{
Node* pNode0 = new Node(0);
Node* pNode1 = new Node(5);
Node* pNode2 = new Node(2);
Node* pNode3 = new Node(3);
Node* pNode4 = new Node(6);
Node* pNode5 = new Node(7);
Node* pNode6 = new Node(8);
connectTree(pNode0, pNode1, pNode2);
connectTree(pNode1, pNode3, pNode4);
connectTree(pNode2, pNode5, pNode6);
pNode0 = biggest(pNode0);
Print(pNode0);
}
找到二叉树中的最大搜索二叉子树
猜你喜欢
转载自blog.csdn.net/wzc2608/article/details/80722738
今日推荐
周排行