题解 | #JZ28 对称的二叉树#

对称的二叉树

http://www.nowcoder.com/practice/ff05d44dfdb04e1d83bdbdab320efbcb

//使用两个向量分别存储根节点->左节点->右节点和根节点->右节点->左节点的层遍历,如果相同则对称
/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
*/
class Solution {
public:
    bool isSymmetrical(TreeNode* pRoot) {
        vector<TreeNode*> lrvec, rlvec;
        
        //根左右的层遍历存储,空子节点也要存储
        lrvec.push_back(pRoot);
        for (int i=0; i<lrvec.size(); ++i) {
            TreeNode *node = lrvec[i];
            if (node) {
                lrvec.push_back(node->left);
                lrvec.push_back(node->right);
            }
        }
        
        //根右左层遍历存储,空子节点也要存储
        rlvec.push_back(pRoot);
        for (int i=0; i<rlvec.size(); ++i) {
            TreeNode *node = rlvec[i];
            if (node) {
                rlvec.push_back(node->right);
                rlvec.push_back(node->left);
            }
        }
        
        //比较两种遍历方式的结果是否相同
        for (int i=0; i<lrvec.size(); ++i) {
            TreeNode *l = lrvec[i], *r = rlvec[i];
            if (l == nullptr || r == nullptr) {
                if (l != r) return false;
            } else if (l->val != r->val) {
                return false;
            }
        }
        
        return true;
    }
};
全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务