私は、バイナリツリーが対称であるか否かを決定するために、次のコードスニペットを書かれている:再帰ツリー対称
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool symmetricityChecker(TreeNode* root, int level) {
bool isValid=false;
if(root==NULL)
return true;
if(level==1)
isValid = root->left->val==root->right->val;
if(root->left!=NULL && root->right!=NULL) {
if(root->left->left!=NULL && root->right->right!=NULL)
isValid = root->left->left->val==root->right->right->val;
if(root->left->right!=NULL && root->right->left!=NULL)
isValid = root->left->right->val==root->right->left->val;
}
return isValid && symmetricityChecker(root->left, level+1) && symmetricityChecker(root->right, level+1);
}
bool isSymmetric(TreeNode* root) {
return symmetricityChecker(root, 0);
}
};
私の目的は、根の左と右の子供が同じであれば、私はチェックし、レベル1であり、 (このレベルではルートとその2人の子供が存在するため)。残りのすべてのレベルについて、root
の子left
の子のleft
子が、の子のright
の子の子であるかどうかを確認します。right
同様に、私はroot
の子のright
の子がleft
の子の子がroot
のright
の子のleft
と等しいかどうかをチェックします。 (これはそうである。なぜなら、ルートの即時の左右の子の対称性は、以前の再帰呼び出しですでにチェックされているからである)。
私のアルゴリズムは正しいと思われますが、誤った結果が出ています。私のロジックが間違っている場合、または実装にエラーがある場合、誰かが親切に指摘できますか?
編集:私は入力[1,2,2,3,4,4,3]
のコードをテストしました。私は答えがtrue
であると予想しますが、代わりにfalse
を得ます。したがって、論理の脆弱性が私のアプローチにあるかどうかはわかりません。あなたはそれをやっているところ
デバッグにはどのようなものがありますか?どのバイナリツリーをテストしましたか? –
@ E_net4、私は '[1,2,2,3,4,4,3]'に対してそれをテストしました。答えは「真実」だと思うが、私は「偽」を得る。したがって、_logical_欠陥があるかどうかは不明です。 –