二叉搜索树的建立
struct node *insert(int k, struct node *T)
{
if (!T)
{
T = new node;
T->data = k;
T->l = T->r = NULL;
}
else
{
if (k > T->data)
T->r = creat(k, T->r);
else
T->l = creat(k, T->l);
}
return T;
}
判断是否为同一棵二叉搜索树
如何判断是否为同一棵二叉树?怎么才叫做是同一棵二叉树呢?
对于二叉搜索树的查找,思路方法是:
1、从根结点开始查找,如果树为空,就返回NULL。
2、如果树不空,就让数据X和根结点的数据Data作比较。
3、如果X的值大于根结点的Data,就往右子树中进行搜索;如果X的值小于根结点的Data,就往左子树中进行搜索。
4、如果X的值等于Data,就表示查找完成,返回该结点。
第一种方法,两棵树直接递归比较:
核心代码:
void judge(struct node *T, struct node *t)
{
if (T&&t)
{
if (T->data != t->data)
{
flag = 1;
return ;
}
judge(T->l, t->l);
judge(T->r, t->r);
}
}
第二种方法,循环查找(效率高):
核心代码:
node* judge(int x, node* T)
{
while(T)
{
if(x > T->data)
T=T->r;
else if(x < T->data)
T=T->l;
else
return T;
}
return NULL;
}
二叉搜索树(镜像)的判断
给出一串数,判断该序列是否为某棵二叉搜索树或某镜像二叉搜索树的前序遍历序列,如果是,则输出其后序遍历结果
解题思路:
1.首先是判断是否是二叉搜索树,给出先序遍历,因而先序的第一个数字是根结点,找到第一个大于等于根节点的数字,从这个数字开始为右子树,若右子树中有小于根结点的数那么它不是二叉搜索树; 镜像结点判断条件相反即可
2、倘若是二叉搜索树则一边递归一边生成二叉树,最后返回根节点
3、对二叉搜索树进行后序遍历
未完待续。。。