
引言
在数据结构学习中,二叉树是重要的非线性结构。递归是处理树形结构最自然的方法之一。本文将通过四个经典问题,讲解如何利用递归算法解决二叉树的遍历与判断问题。
一、单值二叉树
1. 目标特征描述
单值二叉树是指二叉树中所有节点的值都相同的二叉树。
2. 目标实现示例
(此处省略具体图示)
3. 算法思路
采用递归方式遍历整棵树。首先从根节点开始,若左子树存在且值不等于根节点值,返回 false;同理检查右子树。若左右子树均为单值二叉树,则当前树为单值二叉树。
3.1 具体代码实现
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
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);
}
- 时间复杂度:O(N)
- 空间复杂度:O(N)
二、相同的树
1. 目标特征描述
给定两个二叉树,判断它们是否相同。如果两个树在结构上相同,并且对应节点上的数值也相同,则认为是相同的树。
2. 目标实现示例
(此处省略具体图示)
3. 算法思路
比较两棵树的根节点:
- 若都为空,返回 true。
- 若一个为空一个不为空,返回 false。
- 若都不为空但值不等,返回 false。
- 否则递归比较左右子树。


