二叉树中序遍历的情况下,遍历结果是所有节点依次升序的,就是搜索二叉树,否则就不是。
由此我们可以对之前非递归版本的中序遍历稍加修改,在打印节点的时机判断当前节点是否大于上一个节点,就可以判断此二叉树是否是搜索二叉树。
思路:
1中序递归遍历二叉树,将结果保存进一个stack
2比较大小,栈顶为大,栈顶为小。
测试代码
#include<iostream>
#include<stdlib.h>
#include<stack>
#include<queue>
using namespace std;
#define len 15 //定义一个长度
typedef int ElemType;
typedef struct BiTNode
{
ElemType data;
struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
typedef struct Node
{
BiTree btnode;
bool isfirst;
}Node,*node;
//向下遍历,找到节点s应该插入的位置,节点有重复时,忽略这个节点
void SearchTreeNode(BiTree &root, BiTree &s) //注意:使用引用传递
{
if (root == NULL)
return;
if (s->data > root->data)
{
if (root->rchild == NULL)
{
root->rchild = s;
return;
}
SearchTreeNode(root->rchild, s);//s值大于根节点值,未到达叶子节点