#试题28:对称的二叉树
题目:
请设计一个函数判断一棵二叉树是否 轴对称 。
示例 1:
输入:root = [6,7,7,8,9,9,8]
输出:true
解释:从图中可看出树是轴对称的。
示例 2:
输入:root = [1,2,2,null,3,null,3]
输出:false
解释:从图中可看出最后一层的节点不对称。
思路:
1.中序遍历是左中右,所以初步想法是使用中序遍历把二叉树遍历一遍添加到容器中,这时候要把空着的节点以null的形式添加进容器,针对这种[1,2,2,2,null,2]
树结构,然后把容器分为两段比较他们的值,从而得出是否是对称二叉树
2.书中的想法是使用迭代的思路,将比较左右两个节点,判断他们的情况一共有四种情况,都为空true
,一个为空一个不为空false
,值不一样false
,值一样则继续判断左节点的左子节点与右节点的右子节点情况&&
左节点的右子节点与右节点的左子节点情况
代码:
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:bool check(TreeNode* root_left,TreeNode* root_right){if(root_left==nullptr&&root_right==nullptr)return true;if(root_left==nullptr || root_right==nullptr)return false;if(root_left->val!=root_right->val)return false;return check(root_left->left,root_right->right) && check(root_left->right,root_right->left);}bool checkSymmetricTree(TreeNode* root) {return check(root,root);}
};
leetcode101题
考点:
- 考察对二叉树的理解,实质上是利用树的遍历算法解决问题。
- 考察思维能力,树的对称是一个抽象的概念,需要微秒在短时间内清楚判断对称的步骤并转化为代码