判断一个二叉树是否为搜索二叉树

搜索二叉树

二叉树上任何一个节点的左子树上的点都比该节点小,右子树上的点都比该节点大,这样的二叉树称为搜索二叉树。


注意:搜索二叉树与节点标号有关系

这就是搜索二叉树。

判断搜索二叉树

由上图可知,如果搜索二叉树按照中序遍历的方式遍历所有的点,那么这些点肯定是递增的,我们只要在中序遍历输出编号时加一个判断条件(当前输出的编号和前一个输出的编号的大小关系)就可以做到判断中序遍历了。

代码如下:

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;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_40938077/article/details/80471628