@ 代码随想录算法训练营第三周(C语言)|Day15(二叉树)
Day15、二叉树(包含题目 层序遍历 226.翻转二叉树 101.对称二叉树 2 )
层序遍历
题目描述
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
题目解答
int** levelOrder(struct TreeNode* root, int* returnSize, int** returnColumnSizes){
*returnSize = 0;
if(root == NULL)
return NULL;
struct TreeNode *queue[2000];
int **res = malloc(sizeof(int*)*2000);
*returnColumnSizes = malloc(sizeof(int*)*2000);
int rear = 0, front = 0, count = 0;
queue[rear++] = root;
while(front != rear){
int len = rear - front;
count = 0;
res[*returnSize] = malloc(sizeof(int)*(len));
for(int i = 0; i < len; i++){
struct TreeNode *temp = queue[front++];
res[*returnSize][count++] = temp->val;
if(temp->left)
queue[rear++] = temp->left;
if(temp->right)
queue[rear++] = temp->right;
}
(*returnColumnSizes)[*returnSize] = count;
(*returnSize)++;
}
return res;
}
题目总结
数组构造队列。
226.翻转二叉树
题目描述
翻转一棵二叉树。
题目解答
//迭代法
struct TreeNode* invertTree(struct TreeNode* root) {
if(root==NULL){
return NULL;
}
struct TreeNode*temp=root->left;
root->left=root->right;
root->right=temp;
invertTree(root->left);
invertTree(root->right);
return root;
}
题目总结
101.对称二叉树 2
题目描述
给定一个二叉树,检查它是否是镜像对称的。
题目解答
bool compare(struct TreeNode*left,struct TreeNode*right){
if(left==NULL&&right==NULL){
return true;
}else if(left==NULL&&right!=NULL){
return false;
}else if(left!=NULL&&right==NULL){
return false;
}
if(left->val!=right->val){
return false;
}
bool outside= compare(left->left,right->right);
bool inside=compare(left->right,right->left);
return outside&&inside;
}
bool isSymmetric(struct TreeNode* root) {
if(root==NULL){
return true;
}
return compare(root->left,root->right);
}
题目总结
同时对两棵树处理。