树的同构、树的层次遍历输出叶子结点

本文介绍了树的同构问题,通过分析确定树根的方法和判断两棵树同构的条件,提供了相应的代码实现。同时,讨论了树的层次遍历输出叶子结点的解题思路,同样给出了层次遍历的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、树的同构

int main()
{
    建二叉树1;
    建二叉树2;
    判断是否同构并输出;
    return 0;
}

2.如何存储和表示树
经分析,可以直接用数组来存储树。
具体树的表示可以用一个结构体。

struct TreeNode{
    char data;
    int L;
    int R;
};

3.如何确定树根
树根是没有任何一个结点的左右子树指向它的。
所以可以用一个数组checked[]来保存是否有某一个结点的子树指向它,如果checked[i]==false,那么说明i所在的结点就是树根。
4.如何判断两个树是否同构
首先判断是否有空树;
然后判断根结点中的data是否相同;
再判断是否:

树1的左子树和树2的左子树同构 && 树1的右子树和树2的右子树同构
|| 树1的左子树和树2的右子树同构 && 树1的右子树和树2的左子树同构

  • 我的代码
#include<iostream>
using namespace std;

 struct TreeNode{
    char data;
    int L;
    int R;
 };
 const int maxn = 10;
 struct TreeNode trees1[maxn],trees2[maxn];

 //输入根结点,判断两棵树是否同构 
 bool isomorphism(int root1, int root2)
 {
    if(root1==-1 || root2==-1)
    {
        return ((root1==-1) && (root2==-1));    
    }else if(trees1[root1].data != trees2[root2].data){
        
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值