标签:ack 表达 序列 情况 标记 push bak roo 节点
先正向先序遍历一次(先左子树,后右子树),再反向先序遍历一次(先右子树,后左子树).看两次遍历的结果是否相同,如果相同,那么说明是对称的.
节点对称有两个含义, 1.节点的值相等 2.节点在树种的位置对称
如何准确地表示出节点在树中的位置是难点
/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
*/
class Solution {
public:
    vector<int> v_for;
    vector<int> v_bak;
    
    void recur_for(TreeNode* node)
    {
        if(node == NULL)
        {
            v_for.push_back(0);
            return ;
        }
        v_for.push_back(node->val);
        
        recur_for(node->left);
        recur_for(node->right);
    }
    void recur_bak(TreeNode* node)
    {
        if(node == NULL)
        {
            v_bak.push_back(0);
            return ;
        }
        v_bak.push_back(node->val);
        
        recur_bak(node->right);
        recur_bak(node->left);
        
    }
    bool isSymmetrical(TreeNode* pRoot)
    {
        if(pRoot == NULL)return true;
        recur_for(pRoot);
        recur_bak(pRoot);
        
        int for_size = v_for.size();
        int bak_size = v_bak.size();
        if(for_size != bak_size)return false;
        for(int i=0;i<for_size;i++)
        {
            if(v_for[i]!=v_bak[i])return false;
        }
        return true;
    }
};标签:ack 表达 序列 情况 标记 push bak roo 节点
原文地址:https://www.cnblogs.com/virgildevil/p/12210109.html