判断一个树是否为二叉搜索树
二叉搜索树:任何一个结点都比他的左孩子大,比他的右孩子小
思路:中序遍历的顺序是左根右
如果中序遍历的数值顺序是升序排列的,那就是二叉搜索树
typedef class TreeNode
{
public:
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) { this->val = x; right = NULL; left = NULL; }
}*Tree;
void Mid(Tree head)
{
stack<Tree>s;
while (!s.empty() || head != NULL)
{
if (head != NULL)
{
s.push(head);
head = head->left;
}
else
{
head = s.top();
cout << s.top()->val;
s.pop();
head = head->right;
}
}
}
bool ISearch(Tree head)
{
stack<Tree>s;
int min = INT_MIN;
while (!s.empty() || head != NULL)
{
if(head!=NULL)
{
s.push(head);
head = head->left;
}
else
{
head = s.top();
if (s.top()->val < min)//和上一个数比较
return false;
min = s.top()->val;
s.pop();
head = head->right;
}
}
return true;
}
判断一个树是否为二叉搜索树
最新推荐文章于 2023-08-28 15:47:21 发布