【每日刷题】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);
}