码迷,mamicode.com
首页 > 编程语言 > 详细

101. 对称二叉树,c++迭代递归解法

时间:2020-02-23 00:04:30      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:amp   迭代   continue   代码   解答   null   镜像   很多   push   

101. 对称二叉树,c++迭代递归解法

给定一个二叉树,检查它是否是镜像对称的。

例如,二叉树?[1,2,2,3,4,4,3] 是对称的。

    1
   /   2   2
 / \ / 3  4 4  3

但是下面这个?[1,2,2,null,3,null,3] 则不是镜像对称的:

    1
   /   2   2
   \      3    3

这道题可以用迭代和递归两种方法求解

迭代法代码如下,主要思想是,将树的左右分支放入两个队列中。因为题目是判断两个数是否对称,所以在将节点a的孩子放左队列时,先放a的右子结点,再放a的左子结点;在将节点b的孩子放入右队列时,先放b的左子节点,再放b的右子节点。如果该数对称,则按照该放法,左右队列是相等。若左右队列不相等,则该二叉树不对称。

 class Solution {
public:
    bool isSymmetric(TreeNode* ro) {

        if(root==NULL)
            return true;
        queue<TreeNode*> left;
        left.push(root->left);
        queue<TreeNode*> right;
        right.push(root->right);
        while (!right.empty()&&!left.empty())
        {
            TreeNode* cur_left = left.front();
            TreeNode* cur_right=right.front();
            left.pop();
            right.pop();
            if(cur_left==NULL||cur_right==NULL){
                if(cur_left==NULL&&cur_right==NULL)
                    continue;
                return false;
            }
            if(cur_right->val!=cur_left->val)
                return false;
            left.push(cur_left->right);
            left.push(cur_left->right);
            right.push(cur_right->left);
            right.push(cur_right->right);
        }
        return true;
    }
};

递归法:

这种方法是看了解答以后写出来的,代码简洁很多,但思想和迭代法一样,判断left的左子节点和right的右子节点是否相同,left的右子节点和right的左子节点是否相同。

public:
    bool isSymmetric(TreeNode* ro) {
        return isMirror(root,root);
    }
    bool isMirror(TreeNode* left,TreeNode *right){
        if(left==NULL&&right==NULL) return true;
        if(left==NULL||right==NULL) return false;
        return (left->val==right->val)&&
        isMirror(left->right,right->left)&&
        isMirror(left->left,right->right);
    }
};

101. 对称二叉树,c++迭代递归解法

标签:amp   迭代   continue   代码   解答   null   镜像   很多   push   

原文地址:https://www.cnblogs.com/Natakkx/p/12347967.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!