给你一个二叉树的根节点 root
, 检查它是否轴对称。
示例 1:
输入:root = [1,2,2,3,4,4,3] 输出:true
示例 2:
输入:root = [1,2,2,null,3,null,3] 输出:false
提示:
- 树中节点数目在范围
[1, 1000]
内 -100 <= Node.val <= 100
进阶:你可以运用递归和迭代两种方法解决这个问题吗?
/*** 迭代法 --> 栈* @param root* @return*/
bool isSymmetric(TreeNode *root) {//如果结点为空则说明对称if (root == NULL) return true;stack<TreeNode *> st;//将左右子树的头结点入队,这里记得栈的加入顺序st.push(root->right);st.push(root->left);// 接下来就要判断这两个树是否相互翻转while (!st.empty()) {//取出栈的元素优先是left//左子树TreeNode *leftNode = st.top();st.pop();//右指数TreeNode *rightNode = st.top();st.pop();if (leftNode == NULL && rightNode == NULL) { // 左节点为空、右节点为空,此时说明是对称的continue;}// 左右一个节点不为空,或者都不为空但数值不相同,返回falseif (!leftNode || !rightNode || leftNode->val != rightNode->val) return false;// 剩下的就是左右子树数值相等的情况,则加入队列中依次进行比较st.push(leftNode->left);st.push(rightNode->right); // 外层对比st.push(leftNode->right);st.push(rightNode->left); // 内层对比}return true;
}