题目:

请实现一个函数,用来判断一颗二叉树是不是对称的。

注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。

思路:

对于一棵二叉树,从根结点开始遍历,

如果左右子结点有一个为NULL,那么肯定不是对称二叉树;

如果左右子结点均不为空,但不相等,那么肯定不是对称二叉树;

如果左右子结点均不为空且相等,那么

遍历左子树,遍历顺序为:当前结点,左子树,右子树;

遍历右子树,遍历顺序为:当前结点,右子树,左子树;

如果遍历左子树的序列和遍历右子树的序列一样,那么该二叉树为对称的二叉树。(递归实现)

另外一种角度考虑:

把每个结点的左右子树分别看成一棵独立的二叉树,那么判断该二叉树是否为对称的,只需判断左右子树是否互为镜像即可。

在线测试OJ:

http://www.nowcoder.com/books/coding-interviews/ff05d44dfdb04e1d83bdbdab320efbcb?rp=3

AC代码:

/*
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)
    {
    	return isSymetrical(pRoot,pRoot);
    }

    bool isSymetrical(TreeNode* pLeft,TreeNode* pRight){
        if(pLeft==NULL && pRight==NULL)
            return true;
        if(pLeft==NULL || pRight==NULL)
            return false;
        if(pLeft->val!=pRight->val)
            return false;
        return isSymetrical(pLeft->left,pRight->right) && isSymetrical(pLeft->right,pRight->left);
    }
};

相关文章:

  • 2022-12-23
  • 2021-09-06
  • 2021-05-31
  • 2021-08-09
  • 2021-11-28
  • 2021-06-11
猜你喜欢
  • 2022-02-15
  • 2021-12-25
  • 2021-06-13
  • 2022-01-27
  • 2021-05-30
  • 2022-01-09
相关资源
相似解决方案