牛客题霸 [判断二叉树是否对称] C++题解/答案

[牛客题霸 [判断二叉树是否对称] C++题解/答案](https://www.nowcoder.com/practice/1b0b7f371eae4204bc4a7570c84c2de1?tpId=117&&tqId=34937&rp=1&ru=/ta/job-code-high&qru=/ta/job-code-high/question-ranking)

题目描述

给定一棵二叉树,判断琪是否是自身的镜像(即:是否对称)
例如:下面这棵二叉树是对称的
1
/
2 2
/ \ /
3 4 4 3
下面这棵二叉树不对称。
1
/
2 2
\
3 3
备注:
希望你可以用递归和迭代两种方法解决这个问题

题解:

递归法:
自定义一个判断函数,来不断递归左右两边子树的对称子树是否相等
也就是左子树的左边和右子树的右边比较

isEqual(node1->left,node2->right)&&isEqual(node1->right,node2->left);

注:空子树也是对称的
这个思路比较简单
迭代法:
用栈来存根的左右两边子树,然后用while不断弹出元素,比较,再压入新元素
(迭代法的代码就略了)

代码:

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

class Solution {
public:
    /**
     * 
     * @param root TreeNode类 
     * @return bool布尔型
     */
    bool isEqual(TreeNode* node1,TreeNode* node2)
    {
        if(node1==NULL&&node2==NULL)
        {
            return true;
        }
        if(node1==NULL||node2==NULL)
        {
            return false;
        }
        if(node1->val!=node2->val)
        {
            return false;
        }
        return isEqual(node1->left,node2->right)&&isEqual(node1->right,node2->left);
    }
    bool isSymmetric(TreeNode* root) {
        // write code here
        if(root==NULL)return 1;
       // if(!root->left&&!root->left)return root->val;
        return isEqual(root->left, root->right);
    }
};
posted @ 2020-11-05 12:29  回归梦想  阅读(160)  评论(0编辑  收藏  举报