目录
前言:
本文将引出13道经典二叉树题目来帮助我们对于递归有更进一步学习。不仅能够锻炼我们对二叉树的理解,也能强化我们对递归算法的理解。一下是本文将涉及的题目:
《对称二叉树》《单值二叉树》《相同的树》《前序遍历》《另一颗子树》《翻转二叉树》《平衡二叉树》
题目一:《对称二叉树》
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
bool _isSymmetric(struct TreeNode* root1, struct TreeNode* root2)
{
if(root1 == NULL && root2 == NULL)
return true;
if(root1 == NULL || root2 == NULL)
return false;
if(root1->val != root2->val)
return false;
return (_isSymmetric(root1->left, root2->right)) && (_isSymmetric(root1->right, root2->left));
}
bool isSymmetric(struct TreeNode* root) {
return _isSymmetric(root->left, root->right);
}
思路:
首先我们需要知道这道题目的分治子问题,
1、根节点的左子树和右子树比较
2、分两次比较,左子树的右节点和右子树的左节点比较,左子树的左节点和右子树的右节点比较
题目二:《单值二叉树》
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
bool isUnivalTree(struct