【2023王道数据结构】【树与二叉树—page134—05】C、C++完整实现(可直接运行)

~~~笔锋至此又怎能平淡而终,故事开始便不承认普通✌✌✌


题目及题解持续更新中
【2023王道数据结构目录】课后算法设计题C、C++代码实现完整版大全


题目:

已知一颗二叉树按顺序存储结构进行存储,设计一个算法,求编号分别为i和j的两个结点的最近的公共祖先结点的值。
在这里插入图片描述

解题思路:

>如果i>j,说明i所在层大于等于j
>反之,j所在层大于i
>递归找父结点,直到二者相遇

代码实现:

#include <iostream>
using namespace std;
#define MAXSIZE 100

//顺序存储结构
typedef struct BiTNode
{
    char data[MAXSIZE];
    int length = 0;
} BiTNode, *BiTree;

//创建二叉树
BiTree CreateTree(string s)
{
    BiTree T = new BiTNode;
    for (int i = 0; i < s.length(); i++)
    {
        T->data[i + 1] = s[i];
        T->length++;
    }
    return T;
}

//寻找公共祖先结点
void CommonAncestor(BiTree T, int i, int j)
{
    //如果树不为空,且指定两个结点不为空
    if (T && T->data[i] != '#' && T->data[j] != '#')
    {
        //递归寻找公共结点
        while (i != j)
        {
            //如果i>j,则i变为其父结点
            if (i > j)
            {
                i = i / 2;
            }
            //否则,j变为父结点
            else
            {
                j = j / 2;
            }
        }
        //输出两结点相遇时
        cout << T->data[i] << endl;
    }
}

int main()
{
    string s = "123456###78";
    BiTree T = CreateTree(s);
    CommonAncestor(T, 10, 11);
}

猜你喜欢

转载自blog.csdn.net/m0_47256162/article/details/124744383
今日推荐