NC16 判断二叉树是否对称

NC16 判断二叉树是否对称

- 题目描述:
图片说明

- 题目链接:
https://www.nowcoder.com/practice/1b0b7f371eae4204bc4a7570c84c2de1?tpId=117&&tqId=34937&rp=1&ru=/ta/job-code-high&qru=/ta/job-code-high/question-ranking

- 设计思想:
同NC15求二叉树的层序遍历那道题目,仍然是使用BFS的思想,每一次都去遍历每一层的节点然后进行比较。详细操作如下:
图片说明

操作流程如下:
图片说明

- 代码:
c++版本:

/**
 * struct TreeNode {
 *    int val;
 *    struct TreeNode *left;
 *    struct TreeNode *right;
 * };
 */

class Solution {
public:
    /**
     *
     * @param root TreeNode类
     * @return bool布尔型
     */
    bool isSymmetric(TreeNode* root) {
        if(root == NULL) return true;//当根节点为空的时候返回true
        queue<TreeNode*>q;//定义一个队列,用于存储每一层的节点
        q.push(root->left);//把根节点的左孩子放队列
        q.push(root->right);//把根节点的右孩子放队列
        while(!q.empty()){//队列不为空就执行下面的操作
            TreeNode *node1 = q.front();//取出队列的头元素
            q.pop();//出队列
            TreeNode *node2 = q.front();//取出队列的头元素
            q.pop();//出队列
            if(node1 == NULL && node2 == NULL) continue;//当前取出的两个节点都为空的时候继续
            if(node1 == NULL || node2 == NULL || node1->val != node2->val) return false;//取出的两个节点有一个为空或者值不相等都返回false
            //通过看图会发现节点的左孩子对应另一个节点的右孩子
            //节点的右孩子对应另一个节点的左孩子
            q.push(node1->left);
            q.push(node2->right);
            q.push(node1->right);
            q.push(node2->left);
        }
        return true;
    }
};

Java版本:

import java.util.*;

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

前端岗位面试真题宝典 文章被收录于专栏

本面试宝典均来自校招面试题目大数据进行的整理

全部评论

相关推荐

LastWh1spe...:ssob真有些人和那个没睡醒一样
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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