判断一个二叉树是否为搜索二叉树
搜索二叉树
二叉树上任何一个节点的左子树上的点都比该节点小,右子树上的点都比该节点大,这样的二叉树称为搜索二叉树。
注意:搜索二叉树与节点标号有关系
这就是搜索二叉树。
判断搜索二叉树
由上图可知,如果搜索二叉树按照中序遍历的方式遍历所有的点,那么这些点肯定是递增的,我们只要在中序遍历输出编号时加一个判断条件(当前输出的编号和前一个输出的编号的大小关系)就可以做到判断中序遍历了。
代码如下:
struct node
{
node left;
node right;
int value;
};
int a[9999];
int i=0;
int c=0;
void inorder(node head)//中序遍历
{
if(head!=null)//头节点不为空时才执行下列操作
{
stack < node >q;
while (!q.empty()||head!=null)//这两个条件只要满足一个,就执行下面过程
{
if(head!=null)//如果当前节点不为空,就把当前节点放入栈中去,然后让head指向当前节点的左节点,没有打印过程
{
q.push(head);
head=head.left;
}
else if(head==null)//如果当前节点为空,那么就弹出栈顶的元素,打印。然后让head指向栈顶节点的右节点
{
head=q.top();
q.pop();
a[i++]=head.value;//每次都把输出的节点编号存到a数组当中去
if(i!=1&&a[i-1]<a[i-2])//如果当前输出的节点编号小于前一个输出的节点编号,直接结束while循环
{
c=1;
break ;
}
head=head.right;
}
}
if(c)
cout<<"不是搜索二叉树!"<<endl;
else
cout<<"是搜索二叉树!"<<endl;
}
}