文章
11
粉丝
216
获赞
4
访问
102.8k
算法思路:
遍历待判断序列:
性质: 如果是同一颗二叉排序树,则判断序列的当前元素,在原二叉排序树中的位置的父节点一定是之前就被访问过的。
遍历前,根结点要预处理成预访问结点(如果根节点都不同,直接就可以no了);
每访问一个结点都把他的孩子结点设置成预访问的(即往后可以被访问)
如果访问到的结点不是预访问的结点,则表明他们不是同一颗二叉排序树,返回no,结束遍历
遍历顺利结束,返回yes;
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
typedef struct node
{
char data;
struct node *lchild, *rchild;
} *Bitree;
string s;
node* Bisearch(Bitree T, char key)
{
if (T == NULL) return NULL; //找不到,返回NULL,否则返回的都是结点指针
if (T->data == key) return T;
if (T->data > key)
return Bisearch(T->lchild, key);
else
return Bisearch(T->rchild, key);
}
void Insert(Bitree &T, char c)
{
if (T == NULL)
{
T = new node;
T->data = c;
T->lchild = NULL;
T->rchild = NULL;
return ;
}
if (c == T->data) return;
else if (c < T->data) ...
登录后发布评论
暂无评论,来抢沙发