c# struct關鍵字深入
阿新 • • 發佈:2022-03-23
題目
給你一個二叉樹的根節點 root , 檢查它是否軸對稱。
示例1:
輸入:root = [1,2,2,3,4,4,3]
輸出:true
示例2:
輸入:root = [1,2,2,null,3,null,3]
輸出:false
解題思路
//遞迴法 class Solution { public: bool check(TreeNode *left, TreeNode *right) { if(!left&&!right)return true; //如果左子樹和右子樹非空,返回true if (!left || !right) return false; //如果只有一個是空,返回false if(left->val!=right->val)return false;//如果左子樹的值不等於右子樹的值,返回false' return check(left->left, right->right) && check(left->right, right->left);//遞迴檢查左子樹的對稱性和右子樹的對稱性 } bool isSymmetric(TreeNode* root) { return check(root, root); } };
//迭代:用佇列模擬遞迴 class Solution { public: bool check(TreeNode *u, TreeNode *v) { queue <TreeNode*> q; q.push(u); q.push(v); while (!q.empty()) { u = q.front(); q.pop(); v = q.front(); q.pop(); if (!u && !v) continue; if ((!u || !v) || (u->val != v->val)) return false; q.push(u->left); q.push(v->right); q.push(u->right); q.push(v->left); } return true; } bool isSymmetric(TreeNode* root) { return check(root, root); } };