土方法找指定结点在中序遍历中的前驱和后继
1.定义结点数据结构
2.定义一些公共指针
3.插入根结点
4.插入新结点
5.访问结点的操作
6.中序遍历
7.土方法构造一个树
8.测试
9.输出结果
所用编译器:Visual Studio Code 1.43.0 C++环境
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
//定义结点数据结构
typedef struct BiTNode{
ElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//定义一些公共指针
BiTree p=NULL;
BiTree q=NULL;
BiTree pre=NULL;
BiTree p_pre=NULL;
BiTree p_next=NULL;
//插入根结点
void InRoot(BiTree &T,ElemType i){
T=(BiTree)malloc(sizeof(BiTree));
T->data=i;
T->lchild=NULL;
T->rchild=NULL;
}
//插入新结点
void InNew(BiTree &p,ElemType i){
p=(BiTree)malloc(sizeof(BiTree));
p->data=i;
p->lchild=p->rchild=NULL;
}
//访问结点的操作
void visit(BiTree T){
pre=q;
q=T;
if(q==p)
p_pre=pre;
else if(pre==p)
p_next=q;
printf(" %d\n",T->data);
}
//中序遍历
void InOrder(BiTree T){
if(T!=NULL){
InOrder(T->lchild);
visit(T);
InOrder(T->rchild);
}
}
//土方法构造一个树
void CreatTree(BiTree &T){
InRoot(T,1);
InNew(T->lchild,2);
InNew(T->rchild,3);
BiTree s=T->lchild;
BiTree l=T->rchild;
InNew(s->lchild,4);
InNew(s->rchild,5);
InNew(l->lchild,6);
InNew(l->rchild,7);
}
//测试
int main(){
BiTree T;
CreatTree(T);
p=T->rchild->lchild;
printf("中序遍历:\n");
InOrder(T);
printf("p_pre=%d\n",p_pre->data);
printf("p_next=%d\n",p_next->data);
}
//输出结果
中序遍历:
4
2
5
1
6
3
7
p_pre=1
p_next=3