希望学长的代码能给大二西电er们带来帮助(大家一定要好好学习数据结构,合理利用资源)
大家找到了什么bug或有什么改进意见可以私信我或在下方留言,我都会看的
不多说废话直接上代码
#include<bits/stdc++.h>
using namespace std;
struct Tree {
Tree* lson, *rson,*p;
char val;
Tree(char val,Tree* l,Tree *r,Tree *pa) {
this->val = val;
lson = l;
rson = r;
p = pa;
}
};
Tree* A, * B, * D, * E, * G, * C, * F, * H;
void build() {
G = new Tree('G', 0, 0,0);
E = new Tree('E', G, 0,0);
D = new Tree('D', 0, 0,0);
B = new Tree('B', D, E,0);
H = new Tree('H', 0, 0,0);
F = new Tree('F', 0, H,0);
C = new Tree('C', F, 0,0);
A = new Tree('A', B, C,0);
G->p = E; E->p = B; D->p = B; B->p = A; H->p = F; F->p = C; C->p = A;
}
Tree* find_node(Tree *p,char ch) {
if (p == 0)return 0;
if (p->val == ch)return p;
Tree* l = find_node(p->lson,ch);
if (l)return l;
else return find_node(p->rson, ch);
}
Tree* find(char ch) {
Tree* tr = find_node(A,ch);
if (tr->lson == 0) {
Tree* p = tr;
while (p->p && p->p->lson == p) {
p = p->p;
}
return p->p;
}
Tree* p = tr->lson;
while (p->rson) {
p = p->rson;
}
return p;
}
int main() {
build();
char ch; cin >> ch;
Tree* res = find(ch);
if (res == 0)printf("结点%c没有中序前驱结点", ch);
else printf("结点%c的中序前驱结点为%c", ch,res->val);
return 0;
}