1.设计一个求结点x在二叉树中的双亲结点算法。
typedef struct BiTNode{
int data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
BiTNode *p;
void PreOrder(BiTree t,int x){
if(t){
if(t->lchild!=NULL&&t->lchild->data==x)p = t;
if(t->rchild!=NULL&&t->rchild->data==x)p = t;
PreOrder(t->lchild,1);
PreOrder(t->rchild,1);
}
}
- 设计在链式存储结构上交换二叉树中所有结点左右子树的算法。
typedef struct BiTNode{
int data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
void Switch(BiTree t){
if(t->lchild==NULL||t->rchild==NULL)return;
//当只有左子树或者只有右子树时不进行交换
if(t){
Switch(t->lchild);
Switch(t->rchild);
BiTNode *tamp = t->lchild;
t->lchild = t->rchild;
t->rchild = tamp;
}
}
/*
5
/ \
4 3
/ \ / \
1 2 0 0
/ \ / \
0 0 0 0
5 4 1 0 0 2 0 0 3 0 0
*/
- 在链式存储结构上建立一棵二叉排序树。
typedef struct BiTNode{
int data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
void InsertBT(BiTree &t,int e){
if(!t){
t = new BiTNode;
t->data = e;
t->lchild = t->rchild = NULL;
}else if(e<t->data){
InsertBT(t->lchild,e);
}else {
InsertBT(t->rchild,e);
}
}