找到树的最近的共同父母

#include <stdio.h>
#include <conio.h>
int get=0;
typedef struct tn
{
    int Element;
    struct tn *Left;
    struct tn *Right;
    struct tn *Parent;

}TreeNode, *Tree;

Tree CreateTree()

{
    Tree T;
    char ch=getchar();
    /*getch();*/
    if(ch=='#')
    {

        return NULL;
    }
    else
    {
        T=(Tree)malloc(sizeof(TreeNode));

        T->Element=ch-'0';


        T->Left=CreateTree();

        T->Right=CreateTree();
    }
    return T;
}
int Max(int x, int y)
{
    return (x>y?x:y);
}
int Height(Tree T)
{
    if(T==NULL)
        return -1;
    else
        return 1+Max(Height(T->Left),Height(T->Right));

}
Tree AddHeaderNode(Tree T)
{
    Tree T1;
    T1= (Tree)malloc(sizeof(TreeNode));
    T1->Left=T;
    T1->Element=0;
    T->Parent=T1;
    return T;
}
void GiveParent(Tree T)
{
    if(T!=NULL)
    {
        if(T->Left!=NULL)
            T->Left->Parent=T;
        /*printf("%dL ",T->Element);*/

        GiveParent(T->Left);
        if(T->Right!=NULL)
            T->Right->Parent=T;
        /*printf("%dR ",T->Element); */

        GiveParent(T->Right);

    }
    else
        return ;

}
void PrintParent(Tree T)
{
    if(T!=NULL)
    {
        PrintParent(T->Left);
        printf("%d ",T->Parent->Element);
        PrintParent(T->Right);
    }
}
void PrintTree(Tree T)
{
    if(T==NULL)
        return;

    PrintTree(T->Left);
    printf("%d ",T->Element);
    PrintTree(T->Right);
    return;

}
Tree GetSameParent(Tree T1, Tree T2)
{

    while(T1->Element!=T2->Element)
    {
        if(Height(T1)>Height(T2))
            T2=T2->Parent;

        else if(Height(T1)<Height(T2))
            T1=T1->Parent;

        else
        {
            if(T1->Element!=T2->Element)
            {
                T1=T1->Parent;
                T2=T2->Parent;
            }

        }
    }
    return T1;
}
Tree Get

void main()
{
    Tree T1;
    Tree node1, node2;

    printf("The expression you are going to test is 521##43###87###/n");
    printf("The tested node is 3 and 8/n");
    printf("The Result must be like:/n");
    printf("The parent is 5/n ");
    printf("/n*********************************************/n");
    printf("/tNOW YOU COULD START YOUR TRY/n") ;
    printf("*********************************************/n/n");

    printf("Expression:");
    T1= CreateTree();
    AddHeaderNode(T1);
    /*
    getch();*/
    GiveParent( T1);
    node1=T1->Left->Right->Left;/*3*/
    node2=T1->Left->Left;   /*1*/

    printf("The parent is %d ",(GetSameParent(node1, node2))->Element);
    getch();
    return;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值