【王道数据结构】【chapter5树与二叉树】【P159t12】

设一棵二叉树的结点结构为(LLINK,INFO,RLINK),ROOT为指向该二叉树根结点的指针,p和q分别为指向该二叉树中任意两个节点的指针,试编写算法ANCESTOR(ROOT,p,q,r),找到p和q的最近公共祖先结点r

cpp 复制代码
#include <iostream>
#include <stack>
#include<queue>
typedef struct treenode{
    char INFO;
    struct treenode *LLINK;
    struct treenode *RLINK;
}treenode,*ptreenode;

ptreenode buytreenode(char x)
{
    ptreenode n=(ptreenode) malloc(sizeof (treenode));
    n->INFO=x;
    n->LLINK= nullptr,n->RLINK= nullptr;
    return n;
}

ptreenode build_tree()
{
    ptreenode root= buytreenode('A');
    root->LLINK= buytreenode('B');
    root->RLINK= buytreenode('C');
    root->LLINK->LLINK= buytreenode('D');
    root->LLINK->RLINK= buytreenode('E');
    root->RLINK->LLINK= buytreenode('F');
    root->RLINK->RLINK= buytreenode('G');
    root->LLINK->LLINK->LLINK= buytreenode('H');
    root->LLINK->LLINK->RLINK= buytreenode('I');
    return root;
}


void print_tree(ptreenode root) {
    std::queue<ptreenode> tmp;
    tmp.push(root);
    int s = tmp.size();
    while (!tmp.empty()) {
        ptreenode t = tmp.front();
        tmp.pop();
        s--;
        printf("%3c", t->INFO);
        if (t->LLINK) tmp.push(t->LLINK);
        if (t->RLINK) tmp.push(t->RLINK);
        if (s == 0) puts(""), s = tmp.size();
    }
}

ptreenode ancestor(ptreenode root,ptreenode p,ptreenode q)
{
    if(root==q||root==p||root== nullptr) return root;
    ptreenode left= ancestor(root->LLINK,p,q);
    ptreenode right= ancestor(root->RLINK,p,q);
    if(left!= nullptr&&right!= nullptr) return root;
    if(left== nullptr) return right;
    return left;
    //如果left和right都是空的,那么返回其中任意一个就行,也就是返回空
}
int main() {
    ptreenode root=build_tree();
    print_tree(root);

    puts("");
    printf("%3c\n",ancestor(root,root->LLINK->LLINK,root->LLINK->RLINK)->INFO);

    puts("");
    printf("%3c\n",ancestor(root,root->LLINK->LLINK->LLINK,root->LLINK->LLINK->RLINK)->INFO);
    return 0;
}
相关推荐
且去填词1 天前
深入理解 GMP 模型:Go 高并发的基石
开发语言·后端·学习·算法·面试·golang·go
Hcoco_me1 天前
大模型面试题76:强化学习中on-policy和off-policy的区别是什么?
人工智能·深度学习·算法·transformer·vllm
企业对冲系统官1 天前
大宗商品风险对冲系统统计分析功能的技术实现
运维·python·算法·区块链·github·pygame
ValhallaCoder1 天前
Day48-单调栈
数据结构·python·算法·单调栈
Sylvia-girl1 天前
数组题目之移除元素
算法
foundbug9991 天前
小波分析与粒子群算法结合用于电网潮流优化
算法
Morwit1 天前
*【力扣hot100】 448. 找到所有数组中消失的数字
数据结构·算法·leetcode
雾岛听蓝1 天前
理解C++多态
开发语言·c++
朔北之忘 Clancy1 天前
第二章 分支结构程序设计(2)
c++·算法·青少年编程·竞赛·教材·考级·讲义
济6171 天前
c语言基础(1)--数据类型说明
c语言·开发语言