
总体上看,二叉树题目方面运用到达递归的情况较多。所以在做题目之前,可以将函数递归部分先行复习。
leetcode题目链接:单值二叉树

算法逻辑
bool isUnivalTree(struct TreeNode* root) {
if(root == NULL)
return true;
if(root->left &&root->val != root->left->val)
return false;
if(root->right && root->val != root->right->val)
return false;
return isUnivalTree(root->left)&&isUnivalTree(root->right);
}leetcode题目链接: 相同的树

算法逻辑
bool isSameTree(struct TreeNode* p, struct TreeNode* q) {
if(p == NULL && q == NULL)
return true;
if(p == NULL|| q == NULL)
return false;
if(p->val != q->val)
return false;
return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);
}leetcode题目链接:对称二叉树

算法逻辑解析
bool isSameTree(struct TreeNode* p, struct TreeNode* q) {
if(p == NULL && q == NULL)
return true;
if(p == NULL|| q == NULL)
return false;
if(p->val != q->val)
return false;
return isSameTree(p->left,q->right)&&isSameTree(p->right,q->left);
}
bool isSymmetric(struct TreeNode* root) {
if(root == NULL)
return true;
return isSameTree(root->left,root->right);
}leetcode题目链接:另一棵树的子树

算法逻辑解析
bool isSameTree(struct TreeNode* p, struct TreeNode* q) {
if(p == NULL && q == NULL)
return true;
if(p == NULL|| q == NULL)
return false;
if(p->val != q->val)
return false;
return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);
}
bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot) {
if(subRoot == NULL)
return true;
if(root == NULL)
return false;
if(isSameTree(root,subRoot))
{
return true;
}
return isSubtree(root->left,subRoot) || isSubtree(root->right,subRoot);
}牛客链接:二叉树的遍历

#include <stdio.h>
#include<stdlib.h>
typedef struct BTnode{
char data;
struct BTnode* left;
struct BTnode* right;
}BTnode;
BTnode* buynode(char x)
{
BTnode* ptree = (BTnode*)malloc(sizeof(BTnode));
ptree->data = x;
ptree->left = ptree->right = NULL;
return ptree;
}
BTnode* creatTree(char* arr, int* pi)
{
if(arr[*pi] == '#')
{
(*pi)++;
return NULL;
}
BTnode* root = buynode(arr[*pi]);
(*pi)++;
root->left = creatTree(arr,pi);
root->right = creatTree(arr,pi);
return root;
}
void inorder(BTnode* root)
{
if(root == NULL)
{
return;
}
inorder(root->left);
printf("%c ",root->data);
inorder(root->right);
}
int main() {
char arr[100];
scanf("%s",arr);
int i = 0;
BTnode* root = creatTree(arr,&i);
inorder(root);
}