【每日刷题】Day48

【每日刷题】Day48

🥕个人主页:开敲🍉

🔥所属专栏:每日刷题🍍

🌼文章目录🌼

1. 872. 叶子相似的树 - 力扣(LeetCode)

2. 114. 二叉树展开为链表 - 力扣(LeetCode)

1. 872. 叶子相似的树 - 力扣(LeetCode)

//思路:将两个二叉树的叶子节点分别存入两个数组中,使用memcmp函数比较两个数组中的内容是否相同从而判断两树是否叶子相似

bool IsLeafNode(struct TreeNode* root)

{

    return !root->left&&!root->right;

}


 

void GetLeafVal(struct TreeNode* root,int* arr,int* size)

{

    if(root==NULL)

    {

        return;

    }

    if(IsLeafNode(root))

    {

        arr[(*size)++] = root->val;

        return;

    }

    GetLeafVal(root->left,arr,size);

    GetLeafVal(root->right,arr,size);

}

bool leafSimilar(struct TreeNode* root1, struct TreeNode* root2)

{

    int arr1[200];

    int arr2[200];

    int size1 = 0;

    int size2 = 0;

    GetLeafVal(root1,arr1,&size1);

    GetLeafVal(root2,arr2,&size2);

    if(size1!=size2)

    {

        return false;

    }

    int ret = memcmp(arr1,arr2,sizeof(int)*size1);

    return ret==0;

}

2. 114. 二叉树展开为链表 - 力扣(LeetCode)

//思路:先序遍历二叉树,将每个结点的值存入一个数组中,随后创建新的结点存储数组中的每个元素,从二叉树的根节点开始,将left指针置为NULL,right指针指向下一个创建的新结点。

typedef struct TreeNode TN;


//先序遍历存储二叉树结点

void GetNodeVal(TN* root,int* arr,int* size)

{

    if(root==NULL)

    {

        return;

    }

    arr[(*size)++] = root->val;

    GetNodeVal(root->left,arr,size);

    GetNodeVal(root->right,arr,size);

}

//创建新结点存储数组中的元素,将结点的left置为NULL,right指向下一个创建的结点

TN* ListTree(int* arr,int size,int* num)

{

    if((*num)==size)

    {

        return NULL;

    }

    TN* node = (TN*)malloc(sizeof(TN));

    node->val = arr[(*num)++];

    node->left = NULL;

    node->right = ListTree(arr,size,num);

    return node;

}


 

void flatten(struct TreeNode* root)

{

    if(root==NULL)

    {

        return;

    }

    int arr[2001] = {0};

    int size = 0;

    GetNodeVal(root,arr,&size);

    int num = 1;

    root->left = NULL;

    root->right = ListTree(arr,size,&num);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值