西电数据结构上机题目-以中序遍历为例求树中某结点的前驱结点

希望学长的代码能给大二西电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;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值