题解 | #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;
    }
};
全部评论

相关推荐

点赞 评论 收藏
分享
机械打工仔:我来告诉你原因,是因为sobb有在线简历,有些HR为了快会直接先看在线简历,初步感觉不合适就不会找你要详细的了
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务