题目地址
解题思路
本题要判断一棵树是否为对称二叉树,可以利用栈来实现递归,具体实现方式为:
- 建立双节点指针,初始化为根节点的左右节点(当根节点不为空时);
- 而后对两指针所指节点进行判断,如符合对称条件,则
交叉
将其左右子节点push进栈。 - 重点:为什么要交叉push呢? 其实仔细想就能明白。因为栈的后进先出特性以及对称二叉树的特性。
代码实现(C++)
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool isSymmetric(TreeNode* root)
{
if(root==nullptr)
{
return true;
}
stack<TreeNode*> st;
st.push(root->left);
st.push(root->right);
while(!st.empty())
{
TreeNode* rightnode=st.top();
st.pop();
TreeNode* leftnode=st.top();
st.pop();
if(leftnode==nullptr&&rightnode==nullptr)
{
continue;
}
if(leftnode==nullptr||rightnode==nullptr||leftnode->val!=rightnode->val)
{
return false;
}
st.push(leftnode->left);
st.push(rightnode->right);
st.push(leftnode->right);
st.push(rightnode->left);
}
return true;
}
};