Cover image for 面试经典150题 P101 对称二叉树

面试经典150题 P101 对称二叉树


时间轴

时间轴

2025-10-23

init

二叉树

题目:

递归,对称比较

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
struct TreeNode {	int val;	TreeNode *left;	TreeNode *right;	TreeNode()		: val(0)		, left(nullptr)		, right(nullptr)	{	}	TreeNode(int x)		: val(x)		, left(nullptr)		, right(nullptr)	{	}	TreeNode(int x, TreeNode *left, TreeNode *right)		: val(x)		, left(left)		, right(right)	{	}};class Solution {    public:	bool isSame(TreeNode *left, TreeNode *right)	{		if (left != nullptr && right != nullptr &&		    right->val == left->val) {			return isSame(left->right, right->left) &&			       isSame(left->left, right->right);		} else if (left == nullptr && right == nullptr) {			return true;		} else {			return false;		}	}	bool isSymmetric(TreeNode *root)	{		if (root == nullptr) {			return true;		}		return isSame(root->left, root->right);	}};

非递归写法,迭代,把结点入队两次

12345678910111213141516171819202122232425262728293031323334
#include <queue>using std::queue;class Solution {public:    bool isSymmetric(TreeNode* root) {	TreeNode *left, *right;        if (root == nullptr) return true;        queue<TreeNode*> que;        que.push(root->left);        que.push(root->right);        while (!que.empty()) {            left = que.front();            que.pop();            right = que.front();            que.pop();            if (left == nullptr && right == nullptr) continue;            if (left == nullptr || right == nullptr) return false;            if (left->val != right->val) return false;            // 注意这里的对称入队顺序            que.push(left->left);            que.push(right->right);            que.push(left->right);            que.push(right->left);        }        return true;    }};

leetcode hot 100 rewrite

1234567891011121314151617181920212223
class Solution {    private:        bool isSame(TreeNode *p, TreeNode *q)        {                if ((p && !q) || (!p && q))                        return false;                if (!p && !q)                        return true;                if (p->val == q->val)                        return isSame(p->left, q->right) && isSame(p->right, q->left);                else                        return false;        }    public:        bool isSymmetric(TreeNode *root)        {                // root is not null                return isSame(root->left, root->right);        }};
评论加载中…