目录
结构体声明:
1.单值二叉树
题目描述:
思路分析:
源码:
2.二叉树最大深度
题目描述:
思路分析:
源码:
3.检查两棵树是否相同
题目描述:
思路分析:
源码:
4.对称二叉树
题目描述:
思路分析:
源码:
结构体声明:
typedef char BTDataType;
typedef struct BinaryTreeNode
{
BTDataType val;
struct BinaryTreeNode* left;
struct BinaryTreeNode* right;
}BTNode;
1.单值二叉树
题目描述:
如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。
只有给定的树是单值二叉树时,才返回
true
;否则返回false
。
思路分析:
设计条件:下一个子树的数值等于上一个字数的数值,单一子树要求每一个子树数值相等,在设计的时候要考虑数值的传参
判断条件设计:当子树等于空的时候,说明前边遍历的数组没有问题,返回true,如果下一个子树的数值跟这个子树的数值不一样,说明不是单值子树,返回false
成立条件设计:当子树的左子树和右子树都是单值子树的时候,就是单值二叉树
源码:
bool _isUnivalTree(BTNode* root, int val)
{
if (root == NULL)
{
return true;
}
if (root->val != val)
{
return false;
}
return _isUnivalTree(root->left, val)
&& _isUnivalTree(root->right, val);
}
bool isUnivalTree(BTNode* root)
{
if (root == NULL)
{
return true;
}
int val = root->val;
return _isUnivalTree(root, val);
}
2.二叉树最大深度
题目描述:
给定一个二叉树
root
,返回其最大深度。二叉树的最大深度是指从根节点到最远叶子节点的最长路径上的节点数。
思路分析:
设计条件:寻找二叉树最大深度,不断变换左右子树路径,找到最大深度的内条路径。
判断条件设计:当子树为空的时候,说明此时子树后不再有字数了,直接返回0。成立条件设计:当递归至最后一层,说明此时链式二叉树递归至最大深度,向前返回计算深度。
源码:
int maxDepth(BTNode* root)
{
if (root == NULL)
{
return 0;
}
int left = maxDepth(root->left);
int right = maxDepth(root->right);
return left > right ? left + 1 : right + 1;
}
3.检查两棵树是否相同
题目描述:
给你两棵二叉树的根节点
p
和q
,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
思路分析:
设计条件:分别判断两个树的各个节点是否相同,不断递归节点的左子节点和右子节点。
判断条件设计:两棵树同时递归到NULL,返回true;一个树递归到NULL,另一个数没有递归到NULL,返回false;再继续递归两个树的左子树和右子树。成立条件设计:两棵树递归至最后一层还没有返回false。
源码:
bool isSameTree(BTNode* p, BTNode* q)
{
if (p == NULL && q == NULL)
{
return true;
}
if (p == NULL && q != NULL)
{
return false;
}
if (q == NULL && p != NULL)
{
return false;
}
return isSameTree(p->left, q->left);
return isSameTree(p->right, q->right);
}
4.对称二叉树
题目描述:
给你一个二叉树的根节点
root
, 检查它是否轴对称。
思路分析:
设计条件:将一个树分解成两个树,按照检查两棵树是否相同的逻辑递归链式二叉树
判断条件设计:两棵树同时递归到NULL,返回true;一个树递归到NULL,另一个数没有递归到NULL,返回false;再继续递归两个树的左子树和右子树。成立条件设计:两棵树递归至最后一层还没有返回false。
源码:
bool checkNode(BTNode* p, BTNode* q)
{
if (p == NULL && q == NULL)
{
return true;
}
if (p == NULL && q != NULL)
{
return false;
}
if (p != NULL && q == NULL)
{
return false;
}
return checkNode(p->left, q->right);
return checkNode(q->left, p->right);
}
bool isSymmetric(BTNode* root)
{
return checkNode(root, root);
}